nkb7714   4년 전

코드가 좀 복잡해 보일수 있겠습니다.. 

arr 배열에 소수를 차례로 넣어주었습니다.

a       b                            a가 2일경우 b도 2에서 부터 n보다 작을때 까지 계속 비교

2       2                            a가 7일경우 b도 7에서 부터 n보다 작을때 까지 계속 비교 이런 식으로 구했습니다! 다 해봤는데 특정 반례를 못찾겠습니다..

3       3                            check는 b-a 값입니다.

5       5

7       7

.       .

.       .

shiftpsh   4년 전

n = 10000일 때 arr[i] < n 부분에서 런타임 에러가 납니다. 9973 다음의 소수는 10007입니다.

nkb7714   4년 전

arr과 n의 배열을 넉넉히 잡아서 제출하니 맞았습니다..

그런데 틀렸을때의 코드와 맞았을때의 코드에서 테스트케이스의 경계 값인 10000은 4919 5081로 값이 똑같이 나오는데

어느부분이 달라져서 정답이 됐는지 아직 이해가 잘 가지 않네요..

어차피 경계 값이 10000이라서 a,b는 10000은 넘지 않을것이라 생각해 소수는 9973까지만 배열에 저장해두었는데 이게 문제가 되는건가요?

shiftpsh   4년 전

arr[i] <= n 에서 arr[i] = 9973 이라면 루프를 잘 돌고 i++를 할 텐데, arr에서 9973 다음의 원소는 저장한 적이 없죠?

그래서 arr[i]는 얼마가 될지 모르고 arr[i] <= ntrue일지 false일지 모릅니다. 실제로 arr에 9973 다음의 소수인 10007을 추가해 주면 정답을 받습니다.

nkb7714   4년 전

9973 다음 소수까지 저장해줘야 while문을 빠져나오는군요! 

정말 감사합니다 바로 이해됐습니다 ^^

댓글을 작성하려면 로그인해야 합니다.