우선 질문자분의 코드 10번째줄 while문의 조건이 잘못되었습니다.
예를 들어 입력이 10, 20으로 주어졌다고 생각해봅시다.
이때 root는 2부터 시작하므로, 8번째줄의 while문은 root^2 = 4부터 반복을 시작합니다.
2^2의 배수는 모두 제곱 ㄴㄴ수가 아니므로, 12 16 20은 제곱 ㄴㄴ수가 아니게 됩니다.
그러나, 질문자님의 코드 10번째 줄에서는 root**2*mlp가 min보다 클 경우에 대해서만 반복을 시행합니다. 반복문의 첫 번째 경우, root^2 =4 일때 mlp = 1이므로
root**2*mlp = 4 < 10이므로, root = 2인 경우에 대해서는 반복문에서 제곱ㄴㄴ수인지를 검사하지 않습니다.
위에서 말했듯이 root가 2인 경우에도 12, 16, 20을 걸러내야 하는데 말이죠.
결국 질문자님의 코드는 root**2 > 10 인, root = 4부터 검사를 시작하게 되고 틀린 값을 도출하게 되는 것입니다.
입력 : 10 20
출력 : 10
정답 : 7
tanitani2 2년 전
코딩은 이론만 배우다 문제는 최근에 처음 풀기 시작해본 초보입니다.
반례가 눈에 띄지 않는 경우에 보통은 어떤 방식들을 통해서반례들을 찾는지도 여쭙고싶습니다.
감사합니다.