Algorithm ๐ง๐ป๐ป/๋ฐฑ์ค(BOJ)
[๋ฐฑ์ค,c++] 17255๋ฒ - N์ผ๋ก ๋ง๋ค๊ธฐ
dkswnkk
2022. 6. 20. 13:23
๋ฌธ์
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์ ๋ง๋ ๊ณผ์ ๋ค์ ๋ด์์ ์ค๋ณต ๊ณผ์ ๋ค์ ๋ชจ๋ ์ ๊ฑฐํ๋ ๋ฐฉํฅ์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.