BOJ 10973. μ΄μ μμ΄
πββοΈ[Silver III] μ΄μ μμ΄ - 10973
μ±λ₯ μμ½
λ©λͺ¨λ¦¬: 2180 KB, μκ°: 0 ms
λΆλ₯
μ‘°ν©λ‘ , ꡬν, μν
μ μΆ μΌμ
2024λ 6μ 24μΌ 19:09:09
λ¬Έμ μ€λͺ
1λΆν° NκΉμ§μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄ μλ€. μ΄λ, μ¬μ μμΌλ‘ λ°λ‘ μ΄μ μ μ€λ μμ΄μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ¬μ μμΌλ‘ κ°μ₯ μμλ μμ΄μ μ€λ¦μ°¨μμΌλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄κ³ , κ°μ₯ λ§μ§λ§μ μ€λ μμ΄μ λ΄λ¦Όμ°¨μμΌλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄λ€.
N = 3μΈ κ²½μ°μ μ¬μ μμΌλ‘ μμ΄μ λμ΄νλ©΄ λ€μκ³Ό κ°λ€.
- 1, 2, 3
- 1, 3, 2
- 2, 1, 3
- 2, 3, 1
- 3, 1, 2
- 3, 2, 1
μ λ ₯
첫째 μ€μ N(1 β€ N β€ 10,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€μ μμ΄μ΄ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ μ λ ₯μΌλ‘ μ£Όμ΄μ§ μμ΄μ μ΄μ μ μ€λ μμ΄μ μΆλ ₯νλ€. λ§μ½, μ¬μ μμΌλ‘ κ°μ₯ μ²μμ μ€λ μμ΄μΈ κ²½μ°μλ -1μ μΆλ ₯νλ€.
πνμ΄
μ΄μ μμ΄μ ꡬνκΈ° μν 곡μμ΄ μμλ€.
κ·Έκ±Έ κ·Έλλ‘ κ΅¬ννλ©΄ λλ€.
μ΄μ μμ΄μ ꡬνλ 곡μμ λ€μκ³Ό κ°λ€.
- λ€μμλΆν° 첫 λ²μ§Έ κ°μνλ μμλ₯Ό μ°Ύμ
- perm[i-1]λ³΄λ€ μμ μμλ₯Ό λ€μμλΆν° μ°Ύμ
- i-1 μμΉμ μμμ j μμΉμ μμλ₯Ό κ΅ν
- i μμΉλΆν° λκΉμ§μ μμλ₯Ό μμμΌλ‘ λ°κΏ
μ΄κ±Έ ν¨μλ‘ νννλ€.
// μ΄μ μμ΄μ μ°Ύλ ν¨μ
bool PrevPermutation(vector<int>& perm)
{
int n = perm.size();
int i = n - 1;
// Step 1: λ€μμλΆν° 첫 λ²μ§Έ κ°μνλ μμλ₯Ό μ°Ύμ
while (i > 0 && perm[i - 1] <= perm[i])
{
i--;
}
if (i == 0)
{
return false; // μ΄μ μμ΄μ΄ μμ (κ°μ₯ 첫 λ²μ§Έ μμ΄)
}
// Step 2: perm[i-1]λ³΄λ€ μμ μμλ₯Ό λ€μμλΆν° μ°Ύμ
int j = n - 1;
while (perm[j] >= perm[i - 1])
{
j--;
}
// Step 3: i-1 μμΉμ μμμ j μμΉμ μμλ₯Ό κ΅ν
swap(perm[i - 1], perm[j]);
// Step 4: i μμΉλΆν° λκΉμ§μ μμλ₯Ό μμμΌλ‘ λ°κΏ
reverse(perm.begin() + i, perm.end());
return true;
}
πμ½λ
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <climits>
using namespace std;
// μ΄μ μμ΄μ μ°Ύλ ν¨μ
bool PrevPermutation(vector<int>& perm)
{
int n = perm.size();
int i = n - 1;
// Step 1: λ€μμλΆν° 첫 λ²μ§Έ κ°μνλ μμλ₯Ό μ°Ύμ
while (i > 0 && perm[i - 1] <= perm[i])
{
i--;
}
if (i == 0)
{
return false; // μ΄μ μμ΄μ΄ μμ (κ°μ₯ 첫 λ²μ§Έ μμ΄)
}
// Step 2: perm[i-1]λ³΄λ€ μμ μμλ₯Ό λ€μμλΆν° μ°Ύμ
int j = n - 1;
while (perm[j] >= perm[i - 1])
{
j--;
}
// Step 3: i-1 μμΉμ μμμ j μμΉμ μμλ₯Ό κ΅ν
swap(perm[i - 1], perm[j]);
// Step 4: i μμΉλΆν° λκΉμ§μ μμλ₯Ό μμμΌλ‘ λ°κΏ
reverse(perm.begin() + i, perm.end());
return true;
}
void solve()
{
int N;
cin >> N; // μμ΄μ ν¬κΈ° μ
λ ₯ λ°κΈ°
vector<int> perm(N);
for (int i = 0; i < N; ++i)
{
cin >> perm[i]; // μμ΄ μ
λ ₯ λ°κΈ°
}
// μ΄μ μμ΄μ΄ μ‘΄μ¬νλ©΄ μΆλ ₯
if (PrevPermutation(perm))
{
for (int i = 0; i < N; ++i)
{
cout << perm[i] << " ";
}
cout << endl;
}
else
{
cout << -1 << endl; // μ΄μ μμ΄μ΄ μμΌλ©΄ -1 μΆλ ₯
}
}
int main()
{
FILE* stream;
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
freopen_s(&stream, "input.txt", "rt", stdin);
solve();
return 0;
}