728x90
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ป๐ปํ์ด ๊ณผ์
- ์ ๋ ฅ์์ ๋ชจ์๊ณผ ์์์ ๊ฐ๊ฐ ๋ถ๋ฆฌํ์ฌ ๋ฐ๋ก ์ ์ฅํฉ๋๋ค.
- ์๋์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด์, ์ ์ฅํ ๋ชจ์๊ณผ ์์์ ์กฐํฉํ์ฌ ๊ธธ์ด๊ฐ L์ด ๋ ๋๊น์ง ์ํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ชจ์์ ์ต์ 1๊ฐ ~ ์ต๋ L - 2๊ฐ๊น์ง ์ํธ์ ํฌํจ๋ ์ ์์ต๋๋ค.
- ์์์ ์ต์ 2๊ฐ ~ ์ต๋ L - 1๊ฐ๊น์ง ์ํธ์ ํฌํจ๋ ์ ์์ต๋๋ค.
- ์์ฑํ ์ํธ์ ๊ธธ์ด๊ฐ L์ด ๋์๋ค๋ฉด, ์ํธ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
- ์ค๋ณต์ ํผํ๊ธฐ ์ํด, ์ ๋ ฌํ ์ํธ๋ฅผ set ์๋ฃ๊ตฌ์กฐ์ ์ ์ฅํฉ๋๋ค.
- ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด ๋ค ์กฐํฉ ํ์๋ค๋ฉด, ์ถ๋ ฅํฉ๋๋ค.
๋ชจ์๊ณผ ์์์ด ๊ฐ๊ฐ ํฌํจ๋์ด์ผ ํ ๊ตฌ๊ฐ๊ฐ์ด ์ ํด์ ธ ์๊ธฐ ๋๋ฌธ์, ์ด ๋ถ๋ถ์ ์ํธ ์์ฑ์์ ์ถ๊ฐ ์กฐ๊ฑด์ผ๋ก ๊ฑธ์ด์ค์ผ ํฉ๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <iostream>
#include <string>
#include <set>
#include <algorithm>
using namespace std;
class Decoder
{
public:
Decoder(int L, int C);
void FindPasswords();
void ShowPasswords();
private:
void FindCombination(string password, int vowelIdx, int consonantIdx, int vowelCount, int consonantCount);
private:
const set<char> VOWEL{ 'a', 'e', 'i', 'o', 'u' };
string _vowels;
string _consonants;
set<string> _answers;
int _L;
};
Decoder::Decoder(int L, int C)
{
_L = L;
for (int i = 0; i < C; i++)
{
char alphabet;
cin >> alphabet;
auto FindIter = VOWEL.find(alphabet);
FindIter == VOWEL.end() ? _consonants.push_back(alphabet) : _vowels.push_back(alphabet);
}
}
void Decoder::ShowPasswords()
{
for (const auto& answer : _answers)
cout << answer << "\n";
}
void Decoder::FindCombination(string password, int vowelIdx, int consonantIdx, int vowelCount, int consonantCount)
{
if (password.length() == _L)
{
sort(password.begin(), password.end());
_answers.emplace(password);
return;
}
// ๋ชจ์์ ์ต์ 1๊ฐ๋ถํฐ ์ต๋ L-2๊ฐ๊น์ง ๊ฐ์ง ์ ์์
for (int vi = vowelIdx; vi < _vowels.size() and vowelCount < _L - 2; vi++)
{
password.push_back(_vowels[vi]);
FindCombination(password, vi + 1, consonantIdx, vowelCount + 1, consonantCount);
password.pop_back();
}
// ์์์ ์ต์ 2๊ฐ๋ถํฐ ์ต๋ L-1๊ฐ๊น์ง ๊ฐ์ง ์ ์์
for (int ci = consonantIdx; ci < _consonants.size() and consonantCount < _L - 1; ci++)
{
password.push_back(_consonants[ci]);
FindCombination(password, vowelIdx, ci + 1, vowelCount, consonantCount + 1);
password.pop_back();
}
}
void Decoder::FindPasswords()
{
string password = "";
FindCombination(password, 0, 0, 0, 0);
}
int main()
{
ios::sync_with_stdio(false);
cout.tie(NULL); cin.tie(NULL);
int L, C;
cin >> L >> C;
Decoder decoder(L, C);
decoder.FindPasswords();
decoder.ShowPasswords();
return 0;
}
๊ด๋ฆฌํด์ผ ํ ๋ฐ์ดํฐ๋ค์ด ๋ง์์ง๋, ํด๋์ค ํ์ ๊ด๋ฆฌํ๋ ๊ฒ ์ญ์ ํธํ๋ค์.
728x90
๋ฐ์ํ
'๐คAlgorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 3190๋ฒ | ๋ฑ (C++) (1) | 2023.08.26 |
---|---|
[BOJ] 16198๋ฒ | ์๋์ง ๋ชจ์ผ๊ธฐ (C++) (0) | 2023.08.25 |
[BOJ] 15686๋ฒ | ์นํจ ๋ฐฐ๋ฌ (C++) (0) | 2023.08.24 |
[BOJ] 1309๋ฒ | ๋๋ฌผ์ (C++) (0) | 2023.08.24 |
[BOJ] 11048๋ฒ | ์ด๋ํ๊ธฐ (C++) (0) | 2023.08.23 |