1. 문제
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 |