반응형
https://www.acmicpc.net/problem/1342
문제 해결 알고리즘
전형적인 백트래킹 문제인데 거기에 인접해 있는 모든 문자가 같지 않은 문자열이라는 조건만 추가해준다.
소스 코드
#include <bits/stdc++.h>
using namespace std;
int arr[26];
int result = 0;
int N;
bool isTrue(string str){
bool flag = true;
for(int i=0;i<str.size()-1;i++){
if(str[i] == str[i+1]) flag =false;
}
return flag;
}
void dfs(int pos, string str){
if(pos == N){
if(isTrue(str)){
result ++;
}
return;
}
for(int i=0;i<26;i++){
if(arr[i]) {
str += char(i+'a');
arr[i] --;
dfs(pos+1, str);
str = str.substr(0,str.length()-1);
arr[i]++;
}
}
}
int main(){
string str; cin >> str;
N = str.size();
for(int i=0;i<str.size();i++){
arr[str[i] - 'a']++;
}
dfs(0, "");
cout << result;
}
반응형
'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글
[DP] BOJ 2133 타일 채우기 (0) | 2022.03.14 |
---|---|
[수학] BOJ 2553 마지막 팩토리얼 수 (0) | 2022.03.11 |
[브루트 포스] BOJ 1105 팔 (0) | 2022.03.05 |
[브루트 포스] BOJ 1254 팰린드롬 만들기 (0) | 2022.03.02 |
[BFS] BOJ 1743 음식물 피하기 (0) | 2022.02.26 |