10973번: 이전 순열
첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다.
www.acmicpc.net
<내 코드>
N = int(input())
nums = list(map(int, input().split()))
k = N-2
check = False
while k > -1:
if nums[k] > nums[k+1]:
for i in range(k+1, len(nums)):
if nums[i] < nums[k]: # k 이후에서 nums[k]보다 작은 것중 가장 큰 인덱스 찾음
m = i
check = True
if check == True:
break
k -= 1
if check == False:
print(-1)
else:
# k, m 값 바꾸기
nums[k], nums[m] = nums[m], nums[k]
# k 이후 값 내림차순 정렬
tmp = nums[k+1:]
tmp.sort(reverse=True)
ans = nums[:k+1] + tmp
print(*ans)
진짜 짜증나는 문제였다..
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 1927] 최소 힙 - Python( 우선순위 큐, 힙) (0) | 2020.10.23 |
---|---|
[백준 11279] 최대 힙 - Python ( 우선순위 큐, 힙) (0) | 2020.10.23 |
[백준 1476] 날짜 계산 - Python (브루트포스) (0) | 2020.10.22 |
[백준 2309] 일곱 난쟁이 - Python (브루트포스) (0) | 2020.10.21 |
[백준 1026] 보물 - Python (정렬) (0) | 2020.10.16 |