본문 바로가기

Algorithm/BOJ

[BOJ] 17255 N으로 만들기

스스로 풀어낸 기쁜 문제이다.

 

방문 배열을 이차원으로 만들어서 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