이 문제도 생각하는 방식은 간단하다.
<, >에 둘 다 사용할 수 있도록 재귀함수를 만들어주면 된다.
#include <bits/stdc++.h>
using namespace std;
bool bIsFindResult = false;
int bodingNum;
int usedNum[10];
vector<int> result;
vector<bool> vIsFindBigger;
void FindResult(int num, int index)
{
usedNum[num] = 1;
if (index == bodingNum && bIsFindResult == false) {
//cout << "Find Result \n";
for (int i : result) {
cout << i;
}
cout << "\n";
bIsFindResult = true;
return;
}
if (bIsFindResult) return;
if (vIsFindBigger[index]) { //지금 num보다 더 큰 값을 찾는다.
for (int i = num + 1; i < 10; i++) {
if (usedNum[i]) continue;
result.push_back(i);
FindResult(i, index + 1);
result.pop_back();
}
}
else {
for (int i = num - 1; i >= 0; i--) {
if (usedNum[i]) continue;
result.push_back(i);
FindResult(i, index + 1);
result.pop_back();
}
}
usedNum[num] = 0;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> bodingNum;
char temp;
for (int i = 0; i < bodingNum; i++) {
cin >> temp;
if (temp == '<') {
vIsFindBigger.push_back(true);
}
else if (temp == '>') {
vIsFindBigger.push_back(false);
}
}
for (int i = 9; i >= 0; i--) {
result.push_back(i);
FindResult(i, 0);
result.pop_back();
if (bIsFindResult) break;
}
result.clear();
bIsFindResult = false;
fill(&usedNum[0], &usedNum[0] + 10, 0);
for (int i = 0; i < 10; i++) {
result.push_back(i);
FindResult(i, 0);
result.pop_back();
if (bIsFindResult) break;
}
}
'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글
백준 15662 C++ (0) | 2024.11.20 |
---|---|
백준 14891 C++ (1) | 2024.11.19 |
백준 1987 C++ (1) | 2024.10.18 |
백준 14889 C++ (1) | 2024.07.10 |
백준 1931 C++ (0) | 2024.07.01 |