[ 문제 ]
[ 접근방법 ]
백트래킹으로 접근했기에 최악의 경우 O(3 ^ n)의 시간복잡도가 나올 수 있다. 그러나
제일 작은 수열만 찾기도 하고, 많은 경우 isGood 함수에서 가지치기되어 시간 내에 문제를 풀 수 있다.
좋은 수열인지 검사하는 함수( isGood )를 따로 만들어서 보기 쉽게 만들었다.
[ 소스코드 ]
#include <iostream>
#include <string>
using namespace std;
int n;
string str = "";
bool isGood(){
for(int i = 1; i <= str.length() / 2; i++){
string l = str.substr(str.length() - 2 * i, i);
string r = str.substr(str.length() - i, i);
if(l == r)return false;
}
return true;
}
bool f(int x){
if(!isGood())return false;
if(x == n){
cout << str;
return true;
}
for(int i = 1; i <= 3; i++){
str.push_back('0' + i);
if(f(x + 1))return true;
str.pop_back();
}
return false;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
f(0);
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 1197 : 최소 스패닝 트리 (0) | 2025.01.21 |
---|---|
[ 백준 / C++ ] 2965 : 캥거루 세마리 (0) | 2025.01.15 |
[ 백준 / C++ ] 16926 : 배열 돌리기 1 (0) | 2025.01.10 |
[ 백준 / C++ ] 2212 : 센서 (0) | 2025.01.09 |
[ 백준 / C++ ] 1783 : 병든 나이트 (0) | 2025.01.08 |