Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Eau de Cologne

[BOJ 12825] Next Permutation 본문

acmicpc.net

[BOJ 12825] Next Permutation

cologne 2023. 4. 19. 00:24

문제: https://www.acmicpc.net/problem/12825

 

힌트 1:

더보기

$3-1-2$ free permutation과, (모든 $i$에 대해) "$A_1, \cdots, A_i$의 maximum을 $v$라고 했을 때, 이후 등장하는 $A_{i+1}, \cdots, A_N$ 에 등장하는 $v$ 미만의 수만 모으면 모두 내림차순으로 등장해야 한다"는 말은 동치입니다.

 

힌트 2:

더보기

임의의 수열에 관한 Next Permutation은 어떻게 구현할까요? https://en.cppreference.com/w/cpp/algorithm/next_permutation 를 참고합시다.

 

풀이:

더보기

"힌트 1"의 관찰을 사용하면, $A_1, \cdots, A_i$가 3-1-2 free permutation일 때, 남은 수 들을 내림차순으로 전부다 붙여도 3-1-2 free permutation입니다. 그렇기 때문에 $A_j, \cdots, A_N$이 내림차순이 되지 않도록하는 처음 인덱스 $j$를 찾으면, 해당 위치의 수부터 바꾸어줘야 합니다. $A$의 다음 수열을 $B$라고 하면, $A_1, \cdots, A_{j-1} = B_1, \cdots B_{j-1}$이 됩니다.

 

이제, $B_j$를 찾아줍시다. $B_j$는 $A_{j+1}, \cdots, A_N$ 중 $A_j$ 보다 큰 가장 작은 수여도 괜찮습니다. 이는, 주어진 3-1-2 free permutation에 대해 가장 마지막 수를 증가시켜도 3-1-2 free permutation이 되기 때문입니다.

 

이제, 나머지 수를 배치해봅시다. $B_{j+1}$에 올 수 있는 수는 이제까지 등장하지 않은 수 중 $\max(B_1, \cdots, B_j)$ 초과의 아무 수나, $\max(B_1, \cdots, B_j)$ 미만 수의 최댓값입니다. (힌트 1의 관찰에 따라, 해당 수들은 내림차순으로 배치되어야 하기 때문입니다.)

즉, 나머지 수 중 $\max(B_1, \cdots, B_j)$ 미만의 수를 내림차순으로 배치해주고, 나머지 수를 오름차순으로 배치해주면 사전순으로 최솟값이 됩니다.

 

코드: https://www.acmicpc.net/source/share/179ee49d77f244b78cd98ffe286d9729

'acmicpc.net' 카테고리의 다른 글

[BOJ 7916] Cross Spider  (0) 2023.04.20
[BOJ 20123] L-트로미노  (0) 2023.04.19
[BOJ 15479] L番目のK番目の数 (LthKthNumber)  (0) 2023.04.18
[BOJ 19669] Firefighting  (0) 2023.04.17
[08/26] 문제 + 풀이 + 그림  (0) 2022.08.26