본문 바로가기

알고리즘 공부 및 문제 풀이/백준(BOJ)

[boj] 백준 1342 행운의 문자열

[문제]

https://www.acmicpc.net/problem/1342

 

1342번: 행운의 문자열

민식이와 준영이는 자기 방에서 문자열을 공부하고 있다. 민식이가 말하길 인접해 있는 모든 문자가 같지 않은 문자열을 행운의 문자열이라고 한다고 한다. 준영이는 문자열 S를 분석하기 시작

www.acmicpc.net

 

[풀이]

문자열의 길이가 최대 10이어서 전부 확인해도 시간 내 해결이 가능하다. next_permutation 이라는 함수를 이용하는데, 이는 순열을 구하고 싶은 1-2-3-4의 배열이 있다고 가정했을 때 다음 순열인 1-2-4-3로 바뀌고 true를 반환해주는 함수이다.

 

[코드]

 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace::std;

int main() {
    //인접해 있는 문자가 모두 다른 행운의 문자열이 몇 개 나오는 지
    string s;
    cin >> s;

    sort(s.begin(), s.end());

    int answer=0;
    do{
        bool check = true;
        for(int i=0; i<s.length()-1; i++){
            if(s[i]==s[i+1]){
                check = false;
                break;
            }
        }

        if(check){
            answer++;
        }

    }while(next_permutation(s.begin(),s.end()));

    cout << answer;
}