스스로 풀어낸 기쁜 문제이다.
방문 배열을 이차원으로 만들어서 layer마다 확인하도록 했다. BFS로도 풀어낼 수 있을 것 같다.
17255번: N으로 만들기
음이 아닌 정수 N이 주어진다. (0 ≤ N ≤ 10,000,000)
www.acmicpc.net
#include <iostream>
#include <string>
#define MAX 8
using namespace std;
string N; int cnt = 0, N_length;
string visit = "00000000";
bool layer_visit[MAX+1][10];
void input(){
cin >> N;
N_length = N.length();
}
void solve(int len, string cur, string v ){
if( len == N_length ){
if( cur == N )
cnt++;
return;
}
for(int i = 0 ; i < N_length ; i++){
if(v[i] == '0' && !layer_visit[len][N[i] - 48] ){
layer_visit[len][N[i] - 48] = true;
v[i] = '1';
if( cur + N[i] == N[i] + cur)
solve(len+1, cur+ N[i], v );
else{
solve(len+1, cur+ N[i], v );
solve(len+1, N[i] + cur, v);
}
v[i] = '0';
}
}
fill_n(layer_visit[len], 10,0);
}
int main() {
input();
solve(0, "", visit);
std::cout << cnt << std::endl;
return 0;
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 2615 오목 (0) | 2021.07.15 |
---|---|
[BOJ] 7573 고기잡이 (0) | 2021.07.14 |
[BOJ] 3933 라그랑주의 네 제곱수 정리 (0) | 2021.06.15 |
[BOJ] 1058 친구 (0) | 2021.06.10 |
[BOJ] 1535 안녕 (0) | 2021.05.24 |