tlawotjd123   3년 전

밑 코드에서 #1로 하면 정답이나오고 #2로 하면 오답이나옵니다.

#1이 정답인건 확실히 이해가되는데

#2가 왜 정답이안되는지는 전혀이해가안갑니다.

논리적으로 #2도 정답이 나와야하는게 아닌가요? 

maker 리스트는 생성자를 모아둔 리스트입니다 고수님들 도와주세요

dldyddlwl   3년 전

for s in not_maker:

첫 번째 원소부터 하나씩 s라는 변수에 대입해줍니다. 그런데, 여기선 not_maker의 원소를 삭제하고 있는 와중에 not_maker를 돌고 있습니다. 위험합니다. 그 이유는,

0번 인덱스부터 진행해나가는데, 도중에 하나를 remove로 지우면, remove는 자동으로 한 칸으로 앞으로 다 당겨주게 됩니다. 그 말은, 

1 2 3 4 이라는 숫자가 있다고 할 때,

(인덱스는 0부터 시작)

현재 인덱스 1인 원소 2가 셀프넘버가 아니므로 삭제하게 되면, 다음 for루프의 대상은 인덱스가 2인 원소 3입니다. 

그런데 문제는, remove로 한칸씩 앞당겨지면서, 인덱스가 2인 원소는 3이 아니라 4가 되는 겁니다. 이런식으로 꼬이게 되면서 문제가 됩니다.

실제로 출력해보면, 1 3 5 7 9 11 ...... 9997 9999와 같이 잘못된 답이 나옵니다.

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