BOJ

[백준/BOJ] python 10982번 다음 순열

kyj0015 2024. 1. 20. 18:27

언어: python

번호: 10972

제목: 다음 순열

등급: 실버 3

 

풀이 과정: 일단 숫자 n과 순열 arr를 입력받는다. arr은 가장 뒤의 숫자부터 2개씩 비교를 하면서 다음 순열을 찾는다. 예를 들어 [1, 3, 4, 2]라는 순열의 다음 숫자를 찾기 위해서는 [4, 2] -> [3, 4] -> [1, 3]의 순서로 비교를 해야한다. 비교할때 앞에 있는 숫자가 더 작으면 두개의 위치를 교환한다. 그리고 교환한 숫자의 뒤를 정렬한다. 

[1, 3, 4, 2] : 뒤에서부터 4와 2를 비교했는데 앞의 숫자가 더 크니까 그래도 둔다.

[1, 3, 4, 2] : 그 다음인 3과 4를 비교했는데 앞의 숫자가 더 작으니 둘의 위치를 교환한다.

[1, 4, 3, 2] : 위치를 바꾼 뒤 앞의 숫자인 4를 기준으로 뒤를 정렬한다.

[1, 4, 2, 3] : 다음 순열을 출력한다.  

 

 

 

코드:

# 10972
n = int(input())
arr = list(map(int, input().split()))

for i in range(n-2, -1, -1):
    if arr[i] < arr[i+1]:
        for j in range(n-1, i, -1):
            if arr[i] < arr[j]:
                arr[i], arr[j] = arr[j], arr[i]
                arr[i+1:] = sorted(arr[i+1:])
                print(*arr)
                break
        break
else:
    print(-1)

 

 

 

메모:

exit()으로 종료하려 했는데 잘 안되서 break문과 for else문을 썼다.