티스토리 뷰
문제 링크 : https://www.acmicpc.net/problem/10972
10972번: 다음 순열
첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다.
www.acmicpc.net
가장 마지막에 오는 것은 내림차순이라는 문제의 설명이 모든 것을 말해 주고 있다.
N=5 인 경우 즉, 1 2 3 4 5 로 이루어지는 한 순열을 관찰해 보자.
$$ 2 \; 3 \; 5 \; 4 \; 1 $$
1. 순열에서 가장 긴 내림차순으로 이루어진 마지막 부분(suffix)을 찾았을 때,
앞 부분이 2 3 으로 시작되는 순열의 마지막임을 알게 된다.
그렇다면 앞 부분 2 3 을 바꾸어야 할 것이다.
2. 뒤의 5 4 1 중에서 3 보다 큰 첫 수를 찾아서 바꾸어야 한다.
3. 2의 결과 앞 부분은 2 3 에서 2 4 로 바뀌고 뒷 부분은 1 3 5 로 두고 새로이 순열을 구성한다.
위의 1, 2, 3 단계를 일반화시키면 문제는 해결된다.
반응형
'DS\Algo > Mathematics' 카테고리의 다른 글
BOJ 10973 이전 순열 (0) | 2022.11.11 |
---|---|
BOJ 2981 GRANICA ( 검문 ) (1) | 2022.10.14 |
BOJ 10826 피보나치 수 4 (0) | 2022.10.02 |
BOJ 11049 행렬 곱셈 순서 (2) | 2022.09.20 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- BOJ
- nearest common ancestor
- bash script
- 정수론
- map
- C++ big number
- JavaScript
- script
- javascript array
- Vim
- max flow
- fenwick tree
- 백준
- dynamic programming
- stack
- Shell Programming
- number theory
- python3
- RUBY
- shell
- segment tree
- Aho-Corasick
- Reference
- math font
- lazy propagation
- persistent segment tree
- Dijkstra
- bash
- 세그먼트 트리
- 다익스트라
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함