chaos7061   5년 전

우선 감사하다는 말씀부터 드리겠습니다. 그리고 코드가 지저분해서 죄송합니다.

주석은 성심성의껏 달아놓았습니다.

예제코드와 질문글에 있는 반례코드 모두 정상작동 하고, 어느 부분이 틀렸는지 도저히 제 눈에는 보이지 않아서 이렇게 질문 글을 남깁니다.

고수님들의 조언 기다리겠습니다! 감사합니다~

---------수정된 코드를 댓글에 첨부했습니다-----------

sait2000   5년 전

21~28이 매우 오래 걸릴 수 있습니다

첫 줄에 -1 10^18 같은 게 들어오면 저 루프는 대략 10^9번 실행됩니다

chaos7061   5년 전

좋은 지적 감사합니다. 혹시 저런 방법을 쓰지 않고 찾아 낼 수 있는 방법이 있을까요?

chaos7061   5년 전

우선 약수를 이용해서 기존에 오류가 있던 부분만 수정해봤는데(시간 복잡도는 고려하지 않음) 여전히 틀렸습니다가 나옵니다. 어느 부분이 문제일까요 ㅠㅠ?

chaos7061   5년 전

추가 발견) 맨 아래 77~81번 줄 출력 부분에서 만약 list m은 존재하지만 유효한 범위 내의 수를 갖지 않는 경우, -1을 출력할 수 있도록 예외 처리 하였음에도 틀렸습니다가 뜹니다 ㅠㅠ

chaos7061   5년 전

또 추가발견) 63~65번 줄 부분은 validate 함수와 맞지 않는 내용이어서 그냥 now + a != b일때 chk = True로 하고 break 걸었더니 드디어 시간초과가 뜨네요!

시간초과가 뜨고 행복한건 처음이네요 ㅠㅠ.. 아마 약수를 찾는 과정에서 범위를 좀 더 효율적으로 설정해줄 필요가 있는 것 같아요.

지금까지 총 얻어낸 반례로는 아래 같은 것들이 있네요.

이 쉬운 예외들을 간과하고 있었네요...


sait2000   4년 전

좀 큰 힌트같기는 한데, 모든 약수를 다 구할 필요 없습니다. 최대공약수를 구하는 빠른 알고리즘(유클리드 호제법)으로 최대공약수만 계산하면 됩니다. 그리고 유효성 검사도, 그냥 b보다 크기만 하면 통과한다는 걸 생각해보면 알 수 있습니다.

chaos7061   4년 전

힌트 정말 감사합니다!!!

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