๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 17255๋ฒˆ - N์œผ๋กœ ๋งŒ๋“ค๊ธฐ

by ์•ˆ์ฃผํ˜• 2022. 6. 20.

๋ฌธ์ œ

 

17255๋ฒˆ: N์œผ๋กœ ๋งŒ๋“ค๊ธฐ

์Œ์ด ์•„๋‹Œ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (0 ≤ N ≤ 10,000,000)

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <map>
#include <set>
using namespace std;


string s;
map<set<string>,int> visited;
void dfs(int left, int right, string now, set<string> temp){
    if(now.length()>=s.length()){
        if(now == s) visited[temp] = 1;
        return;
    }
    if(left>0){
        temp.insert(s[left-1]+now);
        dfs(left-1, right, s[left-1]+now, temp);
        temp.erase(s[left-1]+now);
    }
    if(right<s.length()){
        temp.insert(now+s[right+1]);
        dfs(left, right+1, now+s[right+1], temp);
        temp.erase(now+s[right+1]);
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>s;
    
    for(int i=0; i<s.length(); i++){
        string temp = "";
        set<string> set_temp = {temp+s[i]};
        dfs(i,i, temp+s[i], set_temp);
    }
    cout<<visited.size();
}

 

ํ’€์ด

์ผ๋‹จ N์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 8๋ฐ–์— ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋ถ„ํžˆ ๋ฐฑํŠธ๋ž™ํ‚น์„ ์ด์šฉํ•ด์„œ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์กฐ๊ฑด์—์„œ  "์ˆซ์ž๋ฅผ ์ ๋Š” ๊ณผ์ •์—์„œ ๋‚˜์˜จ ์ˆ˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋ชจ๋‘ ๊ฐ™๋‹ค๋ฉด ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด๋‹ค." ๋ผ๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต๋˜๋Š” ๊ณผ์ •์€ ์นด์šดํŒ… ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ set์— ๋งŒ๋“  ๊ณผ์ •๋“ค์„ ๋‹ด์•„์„œ ์ค‘๋ณต ๊ณผ์ •๋“ค์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€