4673번 - 셀프 넘버
시간 초과라고 뜹니다. 방법이 틀리진 않은 것 같은데 어떤 부분을 수정해야 속도가 빨라질까요?
지금 코드는 i가 1000이라면 d(1)이 i인지 확인하고, d(2)가 i인지 확인하고, ..., d(999)가 i인지 확인합니다.
그 다음 i가 1001이면 또 다시 d(1)이 i인지 확인하고, d(2)가 i인지 확인하고, ..., d(1000)이 i인지 확인합니다.
달라지지 않는 d(N) 값을 이렇게 계속 반복해서 구할 필요가 있을까요?
N=10000이기 때문에 $O(N^2logN)$는 시간초과의 여지가 있습니다.
잘 생각해보면 n<=10000이기 때문에 범위에서 특정한 x가 셀프넘버라면 생성자는 구간 $[x-36,x]$에 존재합니다.
그래서 $O(36*N)$으로 해결할 수 있습니다.
아래는 정답처리를 받은 제 코드입니다.
댓글을 작성하려면 로그인해야 합니다.
6210seok 2년 전
시간 초과라고 뜹니다. 방법이 틀리진 않은 것 같은데 어떤 부분을 수정해야 속도가 빨라질까요?