Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 하나의 스왑으로 배열을 정렬할 수 있는지 확인

<시간/>

정수 요소를 포함하는 배열이 제공된다고 가정합니다. 한 번의 스왑 작업만 수행할 수 있는 경우 배열의 값을 내림차순으로 정렬할 수 있는지 확인해야 합니다. 가능하면 가능하다고 말하고 그렇지 않으면 불가능합니다.

따라서 입력이 input_list =[7, 8, 12, 10, 11, 9]와 같으면 출력은 "Can be done"이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • temp_list :=list input_list의 복사본
  • temp_list 목록 정렬
  • swap_count :=0
  • 0에서 input_list의 크기 사이에 있는 i에 대해
    • input_list[i]가 temp_list[i]와 같지 않으면
      • swap_count :=swap_count + 1
  • swap_count가 0과 같거나 swap_count가 2와 같으면
    • 참 반환
  • 그렇지 않으면
    • 거짓을 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

from copy import deepcopy
def solve(input_list):
   temp_list = deepcopy(input_list)
   temp_list.sort()
   swap_count = 0
   for i in range(len(input_list)):
      if input_list[i] != temp_list[i]:
         swap_count += 1
   if swap_count == 0 or swap_count == 2:
      print("Can be done")
   else:
      print("Can't be done")
input_list = [7, 8, 12, 10, 11, 9] 
solve(input_list)

입력

[7, 8, 12, 10, 11, 9]

출력

Can be done