hanfrend   2년 전

해당 문제는 재귀함수를 사용하여 순열을 만들어내는 것입니다. 저는 순열을 만든 후에 이를 크기 순으로 정렬하여 중복된 순열을 지우려고 m 크기의 순열 리스트가 만들어지면 내부 원소를 정렬하여 기존의 순열 리스트와 비교하여 중복을 제거하려고 합니다. 이를 위해 재귀 함수 내부에 삽입정렬을 사용하여 검열하려는 순열 리스트를 내부 정렬하려고 하는데, 이 과정에서 list out of range오류가 발생합니다. 

이 부분은 if ch == m 을 통해 순열 리스트의 길이가 맞아야만 정렬을 하도록 하여서 list out of range 오류가 발생하지 않을거라 생각했는데, 어째서 발생하는지 궁금합니다.

zigui   2년 전

make list의 길이가 0인 것 같습니다. 

hanfrend   2년 전

25번 줄로 make에 원소를 추가하여야 for문으로 들어가는데도 list의 길이가 0으로 인식이 되나요?

zigui   2년 전

아 저 코드를 못봤네요. append는 원소 하나를 뒤에 추가하는 연산이라서, make 길이가 1이 되고, 그 원소는 리스트가 됩니다.

예를 들어, 빈 리스트 a에서 a.append([1, 2])를 하면 [[1, 2]]가 됩니다.

hanfrend   2년 전

아 그러면 실행시 25번째 줄의 copy가 되면 빈 리스트인 make에 [1,1]이 원소로 들어가서 [[1,1]]가 되므로 for문안의 make[1]이 비어있으니 리스트 크기 오류가 발생하는 거군요!

감사합니다!

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