python 정렬 질문

조회수 78회
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

    싫어요
    채택 취소하기

    작성하신 코드는 리스트를 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))에서 올바른 위치에 있는 숫자의 횟수 만큼 빼면 옮겨야 할 숫자의 횟수입니다.

    감사합니다.

    • 감사합니다!! 더 공부를 해야겠군용..! 김준호 2020.7.21 23:53

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.