https://www.acmicpc.net/problem/1759
1759๋ฒ: ์ํธ ๋ง๋ค๊ธฐ
์ฒซ์งธ ์ค์ ๋ ์ ์ L, C๊ฐ ์ฃผ์ด์ง๋ค. (3 ≤ L ≤ C ≤ 15) ๋ค์ ์ค์๋ C๊ฐ์ ๋ฌธ์๋ค์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ์ฃผ์ด์ง๋ ๋ฌธ์๋ค์ ์ํ๋ฒณ ์๋ฌธ์์ด๋ฉฐ, ์ค๋ณต๋๋ ๊ฒ์ ์๋ค.
www.acmicpc.net
1. ๋ฌธ์ ์์ฝ
์๋ก ๋ค๋ฅธ C๊ฐ์ ์ํ๋ฒณ ์๋ฌธ์ ์ค L๊ฐ๋ฅผ ์ ํํ์ฌ ์ํธ๋ฅผ ์์ฑํ๋ค.
* ์ํธ๋ ์ต์ 1๊ฐ์ ๋ชจ์(a,e,i,o,u), ์ต์ 2๊ฐ์ ์์์ ํฌํจํ๋ค.
* ์ํธ๋ ์ฆ๊ฐํ๋ ์์์ด๋ค.
๊ฐ๋ฅ์ฑ ์๋ ์ํธ๋ฅผ ๋ชจ๋ ๊ตฌํ๋ผ.
2. ํ์ด
์ฒ์์๋ ์์ด๋ก ์ ๊ทผํ์๋ค. C๊ฐ ์ค L๊ฐ๋ฅผ ๋ฝ๋๋ฐ, ์์๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง ๊ทธ๋ด ํ์๊ฐ ์์๋ค. C๊ฐ์ ์ํ๋ฒณ์ ๋จผ์ ๋ฐฐ์ดํด๋๊ณ , ๊ฑฐ๊ธฐ์ L๊ฐ๋ง ๋ฝ์ผ๋ฉด ๋๋ค.
์กฐํฉ์ ์ฌ์ฉํ์ฌ ํธ๋ ๋ฌธ์ ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด, ๋ชจ๋ ์์ด ๋ฌธ์ ๋ฅผ ์ฒ์์ ์ ๋ ฌํด๋๊ณ ๊ฑฐ๊ธฐ์ ๊ฐ์๋๋ก ๋ฝ๋ ์กฐํฉ์ ์ฌ์ฉํด๋ ๋๋๊ฑด๊ฐ?
=> ์์ด์ ์ค์ธ์ฐ๋ ๊ฒฝ์ฐ์ ์์ด๋ค. 5๋ช ์ ๊ฐ์์ ๋ฌด๋ ์์๋ฅผ ์ ํ๋ค๊ณ ์๊ฐํด๋ณด์.
5๋ช ์ ๊ฐ์๋ฅผ ์ ๋ ฌํด๋๊ณ ๋ฝ๋๋ค๋๊ฑด ๋ง๋ ์๋ ๋ฟ๋๋ฌ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์๊ฐํด์ผ ํ๋ฏ๋ก ์๋ฏธ๊ฐ ์๋ค.
=> ์ด ๋ฌธ์ ๊ฐ ํน์ดํ ์ผ์ด์ค๋ค. ์ํ๋ฒณ์ ํน์ฑ์ ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ์ํ๋ฒณ์ ์ ๋ ฌ๋ ์์๋ก ๋ฝ์์ผ ํ๋ค๋ฉด,
์ํ๋ฒณ์ ์ ๋ ฌํด๋๊ณ ๊ฐ์๋๋ก ๋ฝ์ผ๋ฉด ๋๋ค. ์์๋ฅผ ์ฐ๋ฆฌ๊ฐ ๊ณ ๋ คํ์ง ์์๋ ๋๋ ๊ฒ์ด์๋ค.
1. ์ํ๋ฒณ์ด ๋ด๊ธด src ๋ฐฐ์ด์ ๋จผ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค.
2. ์ ๋ ฌ๋ ์ํ๋ฒณ ์ค L๊ฐ๋ฅผ ๋ฝ๋ ์กฐํฉ์ ์ํํ๋ค.
- ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์, ๋ชจ์๊ณผ ์์์ ์ ๊ฒฝ์จ์ค์ผ ํ๋ ๊ฒ์ด๋ค.
- ์ ํ์ ์ธ ์กฐํฉ ํ์ ๋๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋์ด ์ฌ๊ท๋ฅผ ์ํํ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ ํํ๊ณ ๋๊น์ง ์กฐํฉ์ ๋ง๋๋ ๊ฒฝ์ฐ => ์กฐํฉ์ธ๋ฑ์ค + 1
- ์ธ๋ฑ์ค๋ฅผ ์ ํํ์ง ์๊ณ ๋๊น์ง ์กฐํฉ์ ๋ง๋๋ ๊ฒฝ์ฐ => ์กฐํฉ์ธ๋ฑ์ค (์ ํ์ํด์ ๋ฎ์ด์)
- ์ฌ๊ธฐ์๋ ์ง๊ธ ์ธ๋ฑ์ค๊ฐ ๋ชจ์์ธ์ง, ์์์ธ์ง๋ฅผ ๋จผ์ ๋ณด๊ณ ,
- ๋ชจ์์ผ ๋ ์ ํํ๊ณ ์กฐํฉ์ ๋๊น์ง ๋ง๋ ๋ค => ์กฐํฉ์ธ๋ฑ์ค + 1, ๋ชจ์ ๊ฐ์ + 1
- ๋ชจ์์ผ ๋ ์ ํํ์ง ์๊ณ ์กฐํฉ์ ๋๊น์ง ๋ง๋ ๋ค => ์กฐํฉ์ธ๋ฑ์ค , ๋ชจ์ ๊ฐ์
- ์์์ผ ๋ ์ ํํ๊ณ ์กฐํฉ์ ๋๊น์ง ๋ง๋ ๋ค => ์กฐํฉ์ธ๋ฑ์ค + 1, ์์ ๊ฐ์ + 1
- ์์์ผ ๋ ์ ํํ์ง ์๊ณ ์กฐํฉ์ ๋ง๋ ๋ค => ์กฐํฉ์ธ๋ฑ์ค, ์์ ๊ฐ์
- ๊ฒฝ์ฐ์ ์๊ฐ ๋์ด๋ฌ๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด์ 2๋ฒ์ ์ฌ๊ท๊ฐ 4๋ฒ์ ์ฌ๊ท๋ก ๋์ด๋๋ ๊ฒ์ด๋ค.
- ๋ชจ์๊ฐ์, ์์๊ฐ์๊ฐ ์๋ ๊ธธ์ ๋ค์ ๊ฐ๋ ๋ฐฑํธ๋ํน์ ์ํด ๊ณ์ํด์ ๊ฐฑ์ ๋์ด์ผ ํ๋ฏ๋ก
ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ์ฌ ๊ฐ์๋ฅผ ๊ฐฑ์ ํด์ค๋ค. - ๊ธฐ์ ์กฐ๊ฑด์ผ๋ก, L๊ฐ์ ์ํ๋ฒณ์ ๋ค ๋ฝ์์ ๊ฒฝ์ฐ ์ฌ๊ทํจ์๋ return ๋๋ค.
์ฌ๊ธฐ์ complete code๋ก, ๋ชจ์๊ฐ์๊ฐ 1๊ฐ ์ด์, ์์๊ฐ์๊ฐ 2๊ฐ ์ด์์ธ ์กฐํฉ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฏ๋ก ์ถ๋ ฅํด์ค๋ค. - ์๊ฐ๋ณต์ก๋๋ 2์ด ์ ํ์ด๋ฉฐ (3 ≤ L ≤ C ≤ 15) ๋ฒ์๋ฅผ ๋ง์กฑํ๋ค.
์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ดค์ ๋ 15C7 = 15! / 7!*8! = 6435์ด๋ค.
์์ด๋ก ์์๊น์ง ๊ณ ๋ คํด์ ํ์์ ๊ฒฝ์ฐ, 15P7 = 15! / 8! = 259459200์ด๋ค.
=> ์ฐจ์ด๊ฐ ๋ง์ด ๋๋ค. ์์๋ฅผ ๊ณ ๋ คํ ํ์๊ฐ ์์ผ๋ฉด ๊ณ ๋ คํ์ง ์๊ณ ์กฐํฉ์ ์ฌ์ฉํ๋ ๋ฐฉํฅ์ผ๋ก ํ์.
3. ๋ฌธ์ ์
4. ์ฝ๋
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ_1759_์ํธ๋ง๋ค๊ธฐ {
static char[] src, tgt;
static int N, M;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
tgt = new char[M]; //์กฐํฉ ๋ฐฐ์ด
src = new char[N]; //์ํ๋ฒณ ํ๋ณด ๋ฐฐ์ด
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
src[i] = st.nextToken().charAt(0);
}
Arrays.sort(src); //์ ๋ ฌ์ ํด์ฃผ๊ณ ์กฐํฉ ์ํ
comb(0, 0, 0, 0);
}
static void comb(int tgtIdx, int srcIdx, int moCnt, int jaCnt) {
if (tgtIdx == M) { //๊ธฐ์ ์กฐ๊ฑด1. ์กฐํฉ M๊ฐ๋ฅผ ์์ฑํ์ ๋
//complete code
if (moCnt >= 1 && jaCnt >= 2) { //๋ชจ์ 1๊ฐ ์ด์, ์์ 2๊ฐ ์ด์ -> ๋ง์กฑ
for (int i = 0; i < M; i++)
System.out.print(tgt[i]);
System.out.println();
}
return;
}
if (srcIdx == N) return; //๊ธฐ์ ์กฐ๊ฑด2. N๊ฐ์ ์ํ๋ฒณ์ ๋ชจ๋ ๋ดค์ ๋
tgt[tgtIdx] = src[srcIdx]; //์กฐํฉ์ ๋ฃ์ด์ค
//4๋ฒ์ ์ฌ๊ท
if (tgt[tgtIdx] == 'a' ||tgt[tgtIdx] == 'e' ||tgt[tgtIdx] == 'i' ||tgt[tgtIdx] == 'o' ||tgt[tgtIdx] == 'u') {
comb(tgtIdx + 1, srcIdx + 1, moCnt+1, jaCnt); //๋ชจ์ ์ ํํ๊ณ ์ญ ๊ฐ ๊ฒฝ์ฐ
comb(tgtIdx, srcIdx + 1, moCnt, jaCnt); //๋ชจ์์ด์ง๋ง ์ ํ ์ํ๊ณ ์ญ ๊ฐ ๊ฒฝ์ฐ
}
else {
comb(tgtIdx + 1, srcIdx + 1, moCnt, jaCnt+1); //์์์ ํํ๊ณ ์ญ ๊ฐ ๊ฒฝ์ฐ
comb(tgtIdx, srcIdx + 1, moCnt, jaCnt); //์์์ด์ง๋ง ์ ํ ์ํ๊ณ ์ญ ๊ฐ ๊ฒฝ์ฐ
}
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 15686 ์นํจ๋ฐฐ๋ฌ [Java] (0) | 2022.08.29 |
---|---|
[BOJ] 16637 ๊ดํธ์ถ๊ฐํ๊ธฐ [Java] (0) | 2022.08.28 |
[BOJ] 1697 ์จ๋ฐ๊ผญ์ง [Java] (0) | 2022.08.25 |
[BOJ] 2606 ๋ฐ์ด๋ฌ์ค [Java] (0) | 2022.08.25 |
[BOJ] 10026 ์ ๋ก์์ฝ [Java] (0) | 2022.08.24 |