제민

1759 암호 만들기 본문

코테연습일지/완전탐색 & 백트래킹

1759 암호 만들기

jemin0619 2024. 3. 6. 17:52

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

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

아무리 골 5라고 해도 여기 있을 난이도가 아니다. n과 m과 다를 게 없는 문제였다.

자음 모음은 반대로 썼을 수도 있다. (반대로 쓴 것 같음)

#include <bits/stdc++.h>
using namespace std;

int L,C; //3~15
char arr[20];
char ans[20];
bool isused[20];

void func(int k){
    if(k==L){
        int vowel=0;
        int Consonant=0;
        for(int i=0;i<k;i++){
            if(arr[ans[i]]=='a' || arr[ans[i]]=='e' || arr[ans[i]]=='i' || arr[ans[i]]=='o' || arr[ans[i]]=='u') Consonant++;
            else vowel++;
        }
        if(vowel<2 || Consonant<1) return;
        for(int i=0;i<k;i++) cout<<arr[ans[i]];
        cout<<'\n'; return;
    }
    int st=0;
    if(k>0) st=ans[k-1];
    for(int i=st;i<C;i++){
        if(isused[i]) continue;
        isused[i]=true;
        ans[k]=i;
        func(k+1);
        isused[i]=false;
    }
    return;
}

int main(){
    ios::sync_with_stdio(0); cin.tie(0);
    cin>>L>>C;
    for(int i=0;i<C;i++) cin>>arr[i];
    sort(arr,arr+C);
    func(0);
    return 0;
}

'코테연습일지 > 완전탐색 & 백트래킹' 카테고리의 다른 글

BOJ 3116 생물학자  (0) 2024.10.24
16987 계란으로 계란치기  (1) 2024.03.14
15684 사다리 조작  (1) 2024.03.05
백트래킹(2) - 부분수열의 합, 등  (0) 2024.01.23
백트래킹(1) - N과 M  (0) 2024.01.21