
๋ฐ๋ก ์ด์ ์ต๋ฐฑ์ค ์กฐ๊ต๊ฐ ๋ฐฉ ์ด์ ๋ฅผ ์ฃผ๋จธ๋์ ๋ฃ์ ์ฑ ๊น๋นกํ๊ณ ์์ธ๋ก ๊ฐ ๋ฒ๋ฆฌ๋ ํฉ๋นํ ์ํฉ์ ์ง๋ฉดํ ์กฐ๊ต๋ค์, 702ํธ์ ์๋ก์ด ๋ณด์ ์์คํ ์ ์ค์นํ๊ธฐ๋ก ํ์๋ค. ์ด ๋ณด์ ์์คํ ์ ์ด์ ๊ฐ ์๋ ์ํธ๋ก ๋์ํ๊ฒ ๋์ด ์๋ ์์คํ ์ด๋ค.
์ํธ๋ ์๋ก ๋ค๋ฅธ L๊ฐ์ ์ํ๋ฒณ ์๋ฌธ์๋ค๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ต์ ํ ๊ฐ์ ๋ชจ์(a, e, i, o, u)๊ณผ ์ต์ ๋ ๊ฐ์ ์์์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ์๋ ค์ ธ ์๋ค. ๋ํ ์ ๋ ฌ๋ ๋ฌธ์์ด์ ์ ํธํ๋ ์กฐ๊ต๋ค์ ์ฑํฅ์ผ๋ก ๋ฏธ๋ฃจ์ด ๋ณด์ ์ํธ๋ฅผ ์ด๋ฃจ๋ ์ํ๋ฒณ์ด ์ํธ์์ ์ฆ๊ฐํ๋ ์์๋ก ๋ฐฐ์ด๋์์ ๊ฒ์ด๋ผ๊ณ ์ถ์ธก๋๋ค. ์ฆ, abc๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ํธ์ด์ง๋ง bac๋ ๊ทธ๋ ์ง ์๋ค.
์ ๋ณด์ ์์คํ ์์ ์กฐ๊ต๋ค์ด ์ํธ๋ก ์ฌ์ฉํ์ ๋ฒํ ๋ฌธ์์ ์ข ๋ฅ๋ C๊ฐ์ง๊ฐ ์๋ค๊ณ ํ๋ค. ์ด ์ํ๋ฒณ์ ์ ์ํ ๋ฏผ์, ์์ ํ์ ๋ ์กฐ๊ต๋ค์ ๋ฐฉ์ ์นจํฌํ๊ธฐ ์ํด ์ํธ๋ฅผ ์ถ์ธกํด ๋ณด๋ ค๊ณ ํ๋ค. C๊ฐ์ ๋ฌธ์๋ค์ด ๋ชจ๋ ์ฃผ์ด์ก์ ๋, ๊ฐ๋ฅ์ฑ ์๋ ์ํธ๋ค์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
4 6
a t c i s w
๊ฐ ์ค์ ํ๋์ฉ, ์ฌ์ ์์ผ๋ก ๊ฐ๋ฅ์ฑ ์๋ ์ํธ๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ๋ค.
acis
acit
aciw
acst
acsw
actw
aist
aisw
aitw
astw
cist
cisw
citw
istw
์ด ๋ฌธ์ ๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ์์ ์ํ๋ฒณ์ด ํญ์ ์ค๋ฆ์ฐจ์(์ฌ์ ์)์ด์ด์ผ ํฉ๋๋ค. ์ฆ ์์๊ฐ ๊ณ ์ ๋์ด ์๊ณ ์ ํ๋ง ํ๋ฉด ๋๋ฏ๋ก ์กฐํฉ ๋ฌธ์ ์ ๋๋ค.
๋ฐ๋ผ์ ์ ๋ ฅ ๊ฐ์ ๋ฐ์ ๋, ์ฌ์ ์์ผ๋ก ์ ๋ ฌํด์ฃผ์ด์ผ ํฉ๋๋ค.
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n');;
const [L, C] = input[0].split(' ').map(Number);
const letters = input[1].split(' ').sort(); // ์ํ๋ฒณ์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ!
๊ทธ ๋ค์, ์ฌ๊ท์ ์ผ๋ก ์กฐํฉ์ ์ฐพ์ต๋๋ค. letters ๋ฐฐ์ด์ ์ํํ๋ฉด์ comb ๋ฐฐ์ด์ ๋ง๋ค๊ณ , comb ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ L์ด ๋๋ฉด ์กฐ๊ฑด์ ํ์ธํฉ๋๋ค.
๋ชจ์์ด 1๊ฐ ์ด์์ด๊ณ , ์์์ด 2๊ฐ ์ด์์ ๋ง์กฑํ๋ ์ง ํ์ธํ๊ธฐ ์ํด ๋ชจ์ ๋ฐฐ์ด์ ๋ง๋ญ๋๋ค.
const vowel = ['a', 'e', 'i', 'o', 'u'];
๊ทธ๋ฆฌ๊ณ ํจ์ ์์์, ์กฐ๊ฑด์ ์ค์ ํฉ๋๋ค.
function getCombinations(start, comb) {
// comb ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ L์ด๋ผ๋ฉด, ์กฐ๊ฑด์ ํ์ธ
if(comb.length === L){
// ๋ชจ์์ ํํฐ๋งํด์ ๊ฐ์๋ฅผ ์ธ์ด์ค๋๋ค.
const vowelCount = comb.filter(ch => vowel.includes(ch)).length;
// ์ ์ฒด ๊ธธ์ด์์ ๋ชจ์์ ๊ฐ์๋ฅผ ๋บด๋ฉด ์์์ ๊ฐ์๊ฐ ๋ฉ๋๋ค.
const consonantCount = comb.length - vowelCount;
// ๋ชจ์์ด 1๊ฐ ์ด์, ์์์ด 2๊ฐ ์ด์์ธ์ง ํ์ธํฉ๋๋ค.
if(vowelCount >= 1 && consonantCount >= 2) {
// ๋ง๋ค๋ฉด ์ถ๋ ฅํฉ๋๋ค.
console.log(comb.join(''));
}
// ๋ง๋ค๋ฉด ์ถ๋ ฅํ๊ณ , ์๋๋ผ๋ฉด ๊ทธ๋ฅ, ์ข
๋ฃํฉ๋๋ค.
return;
}
}
๊ทธ๋ฆฌ๊ณ ์ฌ๊ท์ ์ผ๋ก ํจ์๋ฅผ ํธ์ถํด์ฃผ์ด์ผ ํฉ๋๋ค. ์ด ๋, ๋๊ฒจ์ฃผ๋ start์ comb ๋ฐฐ์ด์ ์ถ๊ฐํด ์ฃผ๋ฉด์ ํธ์ถํฉ๋๋ค.
function getCombinations(start, comb) {
...
for(let i = start; i < C; i++) {
getCombinations(i + 1, [...comb, letters[i]])
}
}
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n');;
const [L, C] = input[0].split(' ').map(Number);
const letters = input[1].split(' ').sort();
const vowel = ['a', 'e', 'i', 'o', 'u'];
function getCombinations(start, comb) {
if(comb.length === L){
const vowelCount = comb.filter(ch => vowel.includes(ch)).length;
const consonantCount = comb.length - vowelCount;
if (vowelCount >= 1 && consonantCount >= 2){
console.log(comb.join(''));
}
return;
}
for(let i = start; i < C; i++) {
getCombinations(i + 1, [...comb, letters[i]])
}
}
getCombinations(0, [])
