๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1062
๐ฎ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ฌธ์ ์์ ๋จ๊ทน ๋จ์ด์ ์์๊ณผ ๋์ anta, tica๋ก ๋๋๋ค๊ณ ํ๊ธฐ ๋๋ฌธ์ a,n,t,i,c๋ ๋ฐ๋์ ๋ฐฐ์์ผ ํ๋ ๊ธ์์ด๋ค.
a,n,t,i,c๋ฅผ ํฌํจํด ๋จ์ ์ํ๋ฒณ ์ค k๊ฐ๋ฅผ ์กฐํฉํ๋ค.
์กฐํฉํ ์ํ๋ฒณ์ ๋จ๊ทน ๋จ์ด๋ง๋ค ํด๋น ์ํ๋ฒณ์ ๋ชจ๋ ํฌํจํ๋์ง ํ๋จํ๋ฉด์ ๋ฐฐ์ธ ์ ์๋ ๋จ์ด๋ฅผ ์ฒดํฌํ ํ ํ์ฌ ๊น์ง ์ต๋๋ก ๋ฐฐ์ธ ์ ์๋ ๋จ์ด ๊ฐ์์ ํ์ฌ ๋ฐฐ์ธ ์ ์๋ ๋จ์ด ๊ฐ์๋ฅผ ๋น๊ตํด์ ๊ฐฑ์ ํ๋ค.
- a,n,t,i,c๋ ๋ฐ๋์ ๋ฐฐ์์ผ ํ๋ ๊ธ์์ด๋ฏ๋ก K๊ฐ 5๋ณด๋ค ์๋ค๋ฉด ๋จ๊ทน ๋จ์ด๋ฅผ ๋ฐฐ์ธ ์ ์๊ธฐ ๋๋ฌธ์ 0์ ๋ฆฌํดํ๋ค.
- K๊ฐ 5๋ณด๋ค ํฌ๋ค๋ฉด ์ด๋ฏธ 5๊ฐ๋ฅผ ๋ฐฐ์ ๊ธฐ ๋๋ฌธ์ a,n,t,i,c๋ฅผ ์ ์ธํ (K - 5)๊ฐ์ ๊ธ์๋ฅผ ๋ฐฑํธ๋ํน๊ณผ ์กฐํฉ์ ์ด์ฉํด ์ถ๊ฐ๋ก ์ฒดํฌํ๋ค.
- teachingAlphabet์ด true ๋ผ๋ฉด ์ํ๋ฒณ์ ๋ฐฐ์ด ์ํ์ด๋ค.
- ์ํ๋ฒณ์ ๋ชจ๋ ๋ฐฐ์ ๋ค๋ฉด, ๋จ๊ทน ๋จ์ด์ ํฌํจ๋์ด ์๋์ง ํ๋จํ๋ค.
- ํ์ฌ ์ํ๋ฒณ ์กฐํฉ์์ ๋ช๊ฐ์ ๋จ๊ทน๋จ์ด๋ฅผ ๋ฐฐ์ธ ์ ์๋์ง ์ฒดํฌํ ํ ์ง๊ธ๊น์ง ์ต๋๋ก ๋ฐฐ์ด ๋จ์ด๊ฐ์์ ๋น๊ตํด ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋ค.
๐ฉ Java ์ฝ๋
package com.algorithm.Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_1062_๊ฐ๋ฅด์นจ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
String[] words = new String[N];
for (int loop = 0; loop < N; loop++) {
words[loop] = br.readLine();
}
int rst = teachAnticWord(K, words);
System.out.println(rst);
br.close();
}
private static int count;
private static int teachAnticWord(int K, String[] words) {
/**
* 1. a,n,t,i,c๋ ๋ฌด์กฐ๊ฑด ๋ฐฐ์์ผํ๋ ๊ธ์์ด๋ฏ๋ก K๊ฐ๊ฐ 5๊ฐ ์ด์์ด๋ฉด 5๊ฐ ๋นผ๊ณ ๋จ์ ๊ธ์๋ก ์กฐํฉ ๋ง๋ค๊ธฐ
* 2. ๋ง๋ค์ด์ง ๊ธ์ ์กฐํฉ์ผ๋ก ๋ชจ๋ ๋จ์ด์ ํฌํจ๋๋ ๊ธ์์ธ์ง ํ์ -> ํ๋๋ผ๋ ํฌํจ์ด ์๋ ๊ฒฝ์ฐ ๋ค์ ๋จ์ด๋ก
* 3. ๊ธ์ ์กฐํฉ ๋ณ ์ต๊ณ ๋ก ๊ฐ๋ฅด์น ์ ์๋ ๋จ์ด ๊ฐ์ ๊ฐฑ์
*/
// a,n,t,i,c๋ฅผ ๋ชป๋ฐฐ์ฐ๋ ๊ฒฝ์ฐ 0๊ฐ
if(K < 5) return 0;
count = 0;
boolean[] teachingAlphabet = new boolean[26]; // ๊ฐ๋ฅด์น ์ํ๋ฒณ ์ฒดํฌ ๋ฐฐ์ด
// a,n,t,i,c๋ ๋ฌด์กฐ๊ฑด ๋ฐฐ์์ผํ๋ฏ๋ก true
teachingAlphabet[0] = teachingAlphabet[2] = teachingAlphabet[8] = teachingAlphabet[13] = teachingAlphabet[19] = true;
teachLetter(0,0, K - 5, words, teachingAlphabet);
return count;
}
// start : ์์ ์ธ๋ฑ์ค, letterCount : ๋ฐฐ์ด ๊ธ์ ๊ฐ์, finishCount : ๋ฐฐ์ธ ๊ธ์ ๊ฐ์(a,n,t,i,c ์ ์ธ)
private static void teachLetter(int start, int letterCount, int finishCount, String[] words, boolean[] teachingAlphabet) {
if(letterCount == finishCount) {
// 2. ๋ง๋ค์ด์ง ๊ธ์ ์กฐํฉ์ผ๋ก ๋ชจ๋ ๋จ์ด์ ํฌํจ๋๋ ๊ธ์์ธ์ง ํ์ -> ํ๋๋ผ๋ ํฌํจ์ด ์๋ ๊ฒฝ์ฐ ๋ค์ ๋จ์ด๋ก
int teachingCount = 0;
for (String word : words) {
boolean teach = true;
for (char letter : word.toCharArray()) {
if(!teachingAlphabet[letter-97]) { // ์์คํค์ฝ๋ 97 : a
teach = false;
break;
}
}
if(teach) teachingCount++;
}
// 3. ๊ธ์ ์กฐํฉ ๋ณ ์ต๊ณ ๋ก ๊ฐ๋ฅด์น ์ ์๋ ๋จ์ด ๊ฐ์ ๊ฐฑ์
count = Math.max(count, teachingCount);
return;
}
// ๋ฐฐ์ธ ์ ์๋ ์ํ๋ฒณ ์กฐํฉ ๋ง๋ค๊ธฐ
for(int alpha = start; alpha < 26; alpha++) {
if(!teachingAlphabet[alpha]) {
teachingAlphabet[alpha] = true;
teachLetter(alpha +1, letterCount+1, finishCount, words, teachingAlphabet);
teachingAlphabet[alpha] = false;
}
}
}
}
๋ฐ์ํ
'Algorithm > ์์ ํ์(Brute-Force)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค, Java] 9663๋ฒ : N-Queen (0) | 2022.05.16 |
---|---|
[๋ฐฑ์ค, Java] 16637๋ฒ : ๊ดํธ ์ถ๊ฐํ๊ธฐ (0) | 2022.04.19 |