python 정렬 질문
조회수 433회
N=int(input()) #N=5
N_list=list(map(int,input().split())) #N_list=[2,1,4,5,3]
new_N_list=[]
cnt=0
for i in range(len(N_list)):
if N_list.index(i+1)==N_list[i]:
new_N_list.insert(i+1,i)
cnt+=1
print(cnt)
제가 원하는것은 [2,1,4,5,3]을 [1,2,3,4,5]로 재배열 할때 숫자들이 원래 자리로 가는과정에서의 횟수를 구하고싶은데 [2,1,4,5,3]으로 하게되면 2값이 정확히 나오는데 [2,1,4,3,5]이 예시로도 실행을 하면 0이 나오게됩니다. 다른 예시에서도 정확한 값이 나올수있으면 어떻게해야하나요...
1 답변
-
작성하신 코드는 리스트를 1,2,3,4,5로 재배열 하는 코드가 아니라 N_list 중 숫자 n+1의 위치가 N_list의 n번째 숫자와 일치하는 경우에만 n+1을 뽑아내는 코드인 것 같습니다.
원하셨던 프로그램과 차이가 있습니다.
정렬 알고리즘과 리스트 사용법을 다시 확인해보시기 바랍니다.
정렬이 되지 않기에 2회라고 나온건 우연입니다.
if N_list.index(i+1) == N_list[i]:
if N_list.index(i+1) == i:
옮긴 횟수만 궁금하신 경우 단순히 위와 같이 체크 부분을 변경시킨다면 순서와 숫자를 비교해서 체크할 수 있기 때문에,
올바른 위치에 있는 숫자의 횟수(cnt)를 셀 수 있습니다.
전체 (len(N_list))에서 올바른 위치에 있는 숫자의 횟수 만큼 빼면 옮겨야 할 숫자의 횟수입니다.
감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력