Algorithm/Python

[백준 10973] 이전 순열

🥭맹2 2021. 5. 9. 16:31

1. 문제

www.acmicpc.net/problem/10973

 

10973번: 이전 순열

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

www.acmicpc.net

2. 접근 방법

1. 뒤에서부터 x > y인 부분 찾기
2. y_idx 이후부터 끝까지 중 : x보다는 작으면서 가장 큰 값(max)을 찾음
3. max와 x를 swap
4. max_idx 이후부터 맨 마지막까지 역 sort

 

-> 다음 순열이랑 달리 2번에서 x보다는 작으면서 라는 조건이 들어가야하는데 이거를 간과해서 틀렸음 ^-^ㅠ

3. 코드

python

def find():
    global nums
    for i in range(len(nums)-1, 0, -1):
        x, y = nums[i-1], nums[i]
        if x > y:
            find_nums = sorted(nums[i:], reverse=True)
            for j in find_nums:
                if j < x:
                    max_idx = nums.index(j)
                    break
            nums[i-1], nums[max_idx] = nums[max_idx], nums[i-1]
            nums[i:] = sorted(nums[i:], key=lambda x: -x)
            return

N = int(input())
nums = list(map(int, input().split()))
if nums == sorted(nums):
    print(-1)
else:
    find()
    print(*nums, sep=" ")

4. 마치며

 

'Algorithm > Python' 카테고리의 다른 글

[백준 6603] 로또  (0) 2021.05.11
[백준 10974] 모든 순열  (0) 2021.05.10
[백준 13913] 숨바꼭질 4  (0) 2021.05.06
[백준 1697] 숨바꼭질  (0) 2021.05.06
[백준 10972] 다음 순열  (0) 2021.05.06