๐Ÿ•๏ธ ICPC Sinchon/Backtracking

[BOJ][C++] ๋ฐฑ์ค€ 1759๋ฒˆ: ์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ

์„ ๋‹ฌ 2023. 11. 22. 15:48
๋ฐ˜์‘ํ˜•

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

 

1759๋ฒˆ: ์•”ํ˜ธ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ L, C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (3 ≤ L ≤ C ≤ 15) ๋‹ค์Œ ์ค„์—๋Š” C๊ฐœ์˜ ๋ฌธ์ž๋“ค์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž๋“ค์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์ด๋ฉฐ, ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์€ ์—†๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

๋ฐ”๋กœ ์–ด์ œ ์ตœ๋ฐฑ์ค€ ์กฐ๊ต๊ฐ€ ๋ฐฉ ์—ด์‡ ๋ฅผ ์ฃผ๋จธ๋‹ˆ์— ๋„ฃ์€ ์ฑ„ ๊นœ๋นกํ•˜๊ณ  ์„œ์šธ๋กœ ๊ฐ€ ๋ฒ„๋ฆฌ๋Š” ํ™ฉ๋‹นํ•œ ์ƒํ™ฉ์— ์ง๋ฉดํ•œ ์กฐ๊ต๋“ค์€, 702ํ˜ธ์— ์ƒˆ๋กœ์šด ๋ณด์•ˆ ์‹œ์Šคํ…œ์„ ์„ค์น˜ํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ์ด ๋ณด์•ˆ ์‹œ์Šคํ…œ์€ ์—ด์‡ ๊ฐ€ ์•„๋‹Œ ์•”ํ˜ธ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋˜์–ด ์žˆ๋Š” ์‹œ์Šคํ…œ์ด๋‹ค.

์•”ํ˜ธ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ L๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋“ค๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์ตœ์†Œ ํ•œ ๊ฐœ์˜ ๋ชจ์Œ(a, e, i, o, u)๊ณผ ์ตœ์†Œ ๋‘ ๊ฐœ์˜ ์ž์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ๋‹ค. ๋˜ํ•œ ์ •๋ ฌ๋œ ๋ฌธ์ž์—ด์„ ์„ ํ˜ธํ•˜๋Š” ์กฐ๊ต๋“ค์˜ ์„ฑํ–ฅ์œผ๋กœ ๋ฏธ๋ฃจ์–ด ๋ณด์•„ ์•”ํ˜ธ๋ฅผ ์ด๋ฃจ๋Š” ์•ŒํŒŒ๋ฒณ์ด ์•”ํ˜ธ์—์„œ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ๋ฐฐ์—ด๋˜์—ˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ถ”์ธก๋œ๋‹ค. ์ฆ‰, abc๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์•”ํ˜ธ์ด์ง€๋งŒ bac๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

์ƒˆ ๋ณด์•ˆ ์‹œ์Šคํ…œ์—์„œ ์กฐ๊ต๋“ค์ด ์•”ํ˜ธ๋กœ ์‚ฌ์šฉํ–ˆ์„ ๋ฒ•ํ•œ ๋ฌธ์ž์˜ ์ข…๋ฅ˜๋Š” C๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด ์•ŒํŒŒ๋ฒณ์„ ์ž…์ˆ˜ํ•œ ๋ฏผ์‹, ์˜์‹ ํ˜•์ œ๋Š” ์กฐ๊ต๋“ค์˜ ๋ฐฉ์— ์นจํˆฌํ•˜๊ธฐ ์œ„ํ•ด ์•”ํ˜ธ๋ฅผ ์ถ”์ธกํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. C๊ฐœ์˜ ๋ฌธ์ž๋“ค์ด ๋ชจ๋‘ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€๋Šฅ์„ฑ ์žˆ๋Š” ์•”ํ˜ธ๋“ค์„ ๋ชจ๋‘ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ L, C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (3 ≤ L ≤ C ≤ 15) ๋‹ค์Œ ์ค„์—๋Š” C๊ฐœ์˜ ๋ฌธ์ž๋“ค์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž๋“ค์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž์ด๋ฉฐ, ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์€ ์—†๋‹ค.

์ถœ๋ ฅ

๊ฐ ์ค„์— ํ•˜๋‚˜์”ฉ, ์‚ฌ์ „์‹์œผ๋กœ ๊ฐ€๋Šฅ์„ฑ ์žˆ๋Š” ์•”ํ˜ธ๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ

// ํ’€์ด : https://whkakrkr.tistory.com

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

using namespace std;

int l,c;
char code[15];
vector<char> v;

bool isRight() {
    int bowl=0, consonant=0;
    for(int i=0; i<l; i++) {
        char m = code[i];
        if(m=='a' || m=='e' || m=='i' || m=='o' || m=='u') {
            bowl++;
        } else {
            consonant++;
        }
    }
    
    return bowl>=1 && consonant>=2;
}

void recur(int k, int cur) {
    if(k==l) {
        if(!isRight()) {
            return;
        }
        for(int i=0; i<l; i++) {
            cout << code[i];
        }
        cout << "\n";
        return;
    }
    
    for(int i=cur; i<c; i++) {
        code[k] = v[i];
        recur(k+1, i+1);
    }
}

int main() {
    char tmp;
    cin >> l >> c;
    for(int i=0; i<c; i++) {
        cin >> tmp;
        v.push_back(tmp);
    }
    
    sort(v.begin(), v.end());
    
    recur(0,0);
}
๋ฐ˜์‘ํ˜•