[백준/Python] 10973_이전 순열

2021. 6. 22. 12:57백준 알고리즘

문제

https://www.acmicpc.net/problem/10973

 

10973번: 이전 순열

첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다.

www.acmicpc.net

풀이

next_permutation 알고리즘의 부등호만 바꾸면 이전 순열을 구현할 수 있습니다.

코드

import sys


def prev_permutation(lst):
    l = len(lst)
    x = -1
    for i in range(l - 2, -1, -1):
        if lst[i] > lst[i + 1]:
            x = i
            break
    if x == -1:
        return [-1]
    for j in range(l - 1, x, -1):
        if lst[x] > lst[j]:
            lst[x], lst[j] = lst[j], lst[x]
            break
    return lst[:x + 1] + lst[:x:-1]


n = int(sys.stdin.readline().rstrip())
case = list(map(int, sys.stdin.readline().rstrip().split()))
answer = prev_permutation(case)
print(' '.join(map(str, answer)))

'백준 알고리즘' 카테고리의 다른 글

[백준/Python] 12865_평범한 배낭  (0) 2021.06.24
[백준/Python] 3036_링  (0) 2021.06.24
[백준/Python] 2529_부등호  (0) 2021.06.22
[백준/Python] 1735_분수 합  (0) 2021.06.22
[백준/Python]14503_로봇 청소기  (0) 2021.06.18