백준

백준 1342번 C++

solfa 2023. 12. 23. 23:35

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

 

1342번: 행운의 문자열

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

www.acmicpc.net

보자마자 생각난 것 : color graph! 알고리즘 수업 열심히 들은 보람이 있다고 생각했다 ㅋㅋㅋ
교수님 보고 계십니까?!! 앞으로 엘베에서 마주치면 90도로 인사박겠습니다!!!
하하
암튼 나한테 휴학은 없으니까 내년 그니까 3학년 1학기 시험기간이 돌아올 때 까지 1일 1백준 다시 레츄고
애들아 열심히 하자...

 

생각

행운의 문자열인지 확인하는 방법 (Find 함수로 따로 만들자!)
1. 인접한 문자가 같은지/같지 않은지 확인
2. 문자열의 인덱스를 1씩 증가해가면서 확인하다가 틀리면 false return하기
3. 인덱스 끝까지 맞으면 count 증가

재배치 하는 방법(함수 따로 안만들고 main에서 dfs로 전부 바꾸면 될 듯?)
1. 하... 어떻게 하지 주어진 문자열에서 나올 수 있는 모든 문자열 찾기! >>> 순열 구현하기
2. 순열이라 어쩔 수 없이 중복이 발생하는데 이걸 어떻게 처리할 것인가 고민해보기

 

or 한 번에 처리하는 방법...!!!
1. 입력받은 문자열을 기록해둔다
2. 기록해둔 알파벳을 하나씩 넣으면서 새로운 문자열을 만들어준다! (이 단계에서 무조건 다른 알파벳을 뒤에 붙이기 때문에!! 행운의 문자열 판단도 동시에 가능함)

#include <iostream>
#include <algorithm>
using namespace std;

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

int find(string& s){
    string temp = s;
    sort(temp.begin(), temp.end());

    int count = 0;

    do{
        if (check(temp)){
            count++;
        }
    } while (next_permutation(temp.begin(), temp.end()));
    return count;
}

int main(){
    string s;
    cin >> s;
    int result = find(s);
    cout << result;
}
728x90

'백준' 카테고리의 다른 글

백준 2903번 C++  (0) 2023.12.26
백준 11047 C++  (1) 2023.12.24
백준 10819 C++  (1) 2023.11.27
백준 1182 C++  (1) 2023.11.26
백준 15649 C++  (0) 2023.11.24