728x90
반응형
https://www.acmicpc.net/problem/10972
10972번: 다음 순열
첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다.
www.acmicpc.net
풀이
이 문제는 다음 수열을 출력하는 문제이다.
1 4 3 2의 경우
- 뒤에서부터 순열을 비교, 뒷 값이 앞 값보다 큰 경우까지 반복한다. (1, 4 가 해당)
- 이때 1의 인덱스를 x라고 하고 4의 인덱스를 y라고 한다.
- 다시 두 번째 for 문으로부터 탐색하여 인덱스 x값 즉 1 보다 큰 값이 있으면 그 값과 1을 바꿔준다. -> 여기서는 1과 2이 바뀜
- y에 해당하는 인덱스부터 정렬해준 뒤 이어 붙여준다. -> 여기서는 4 3 1을 정렬해준 1 3 4가 이어붙어 2 1 3 4가 되게 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
n=int(input())
arr=list(map(int,input().split()))
check=True
for i in range(n-1,0,-1):
if arr[i-1]<arr[i]:
x,y=i-1,i
for j in range(n-1,0,-1):
if arr[j]>arr[x]:
arr[j],arr[x]=arr[x],arr[j]
check=False
break
if not check:
arr= arr[:y]+sorted(arr[y:])
print(*arr)
break
if check:
print(-1)
|
cs |
728x90
반응형
'Python3 > 백준 알고리즘' 카테고리의 다른 글
2022.03.03 [백준] (python 파이썬) 경비원 (0) | 2022.03.03 |
---|---|
2022.03.03 [백준] (python 파이썬) 1, 2, 3 더하기 (0) | 2022.03.03 |
2022.02.28 [백준] (python 파이썬) 암호 만들기 (0) | 2022.02.28 |
2022.02.28 [백준] (python 파이썬) 이항 계수 2 (0) | 2022.02.28 |
2022.02.28 [백준] (python 파이썬) 다리 놓기 (0) | 2022.02.28 |
댓글