Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- DFS활용
- 재귀
- django
- 백준알고리즘
- 그리디알고리즘
- 코드트리
- socket.io
- 자료구조
- react
- 코딩테스트
- 코테
- CSS
- 블챌
- JS
- DFS
- 파이썬
- DP
- DFS기초
- 문자열
- 스택
- 그리디
- react-query
- 코딩테스트실력진단
- 완전탐색
- 구현
- 알고리즘
- Express
- BFS
- 스택자료구조
- 백준
Archives
- Today
- Total
꾸준하게 거북이처럼
백준 10972 파이썬 - 다음 순열 본문
10972번: 다음 순열
첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다.
www.acmicpc.net
처음에 재귀를 통해 문제를 풀었지만 n의 범위가 10,000까지이기 때문에 런타임에러가 나왔다. n 범위를 항상 확인하고 빠르게 방법을 바꿨어야 했다,, ㅎㅎ
다음으로 오는 순열을 알기 위해서는 아래와 같은 특정 규칙을 알아야 문제를 풀 수 있다.
풀이
1 4 3 2를 예시로 알고리즘을 알아본다.
1. 뒤에서 부터 순열을 비교하며, 뒷 값이 앞 값보다 큰 경우까지 반복한다. (3,2), (4,3)은 해당하지 않고 (1,4)가 해당된다.
이 때, 1의 인덱스는 x, 4의 인덱스는 y라고 한다.
2. 다시 뒤에서부터 값을 비교하며 인덱스 x보다 큰 값이 있으면 그 값과 swap한다.
1과 2를 비교했고, 2가 크기 때문에 이 둘을 swap 한다.
3. y에 해당하는 인덱스부터 오름차순 정렬을 한 뒤에 y이전 배열에 이어 붙인다.
4 3 1을 sort 해서 1 3 4가 된다.이어 붙여 2 1 3 4가 된다.
코드
n = int(input())
arr = list(map(int, input().split()))
for i in range(n - 1, 0, -1):
if arr[i] > arr[i - 1]:
x = i - 1
y = i
for j in range(n - 1, 0, -1):
if arr[x] < arr[j]:
arr[x], arr[j] = arr[j], arr[x]
new = arr[:y] + sorted(arr[y:])
for val in new:
print(val, end=' ')
exit()
print(-1)
참고
[백준] 10972: 다음 순열 (Python)
1 4 3 2를 예시로 알고리즘을 알아본다.뒤에서 부터 순열을 비교하며, 뒷 값이 앞 값보다 큰 경우까지 반복한다. (3,2), (4,3)은 해당하지 않고 (1,4)가 해당된다이 때, 1의 인덱스는 x, 4의 인덱스는 y라
velog.io
'Algorithm 문제 & 공부 > 완전탐색' 카테고리의 다른 글
백준 15661번 링크와 스타트 (0) | 2022.10.03 |
---|---|
백준 14889번 파이썬 - 스타트와 링크 (1) | 2022.09.30 |
백준 14501 파이썬 - 퇴사 (1) | 2022.09.30 |
백준 파이썬 1759번 (0) | 2022.09.18 |
백준 1107번 리모컨 - 파이썬 (0) | 2022.08.01 |
Comments