๋ฐ์ํ
[BOJ] 1062๋ฒ ๊ฐ๋ฅด์นจ
https://www.acmicpc.net/problem/1062
๋ฌธ์ ์ ๊ทผ
๋ฐฑํธ๋ํน์ ์ด์ฉํด์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํด๋ณด๋ ๋ฌธ์ ์๋ค.
์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ ์ํด์ ๋ชจ๋ ๋จ์ด๊ฐ ํฌํจํ๋ anta, tica ์ ํฌํจ๋ 5๊ฐ์ ๋จ์ด๋ฅผ ํ์ ๋จ์ด๋ก ํฌํจ์ํค๊ณ , ๊ณต๋ฐฑ์ผ๋ก ๋ฐ๊ฟ์ฃผ์ด์ ํ์ํด์ผ ํ๋ ๋จ์ด์ ๊ธธ์ด๋ฅผ ์ค์๊ณ , ๋ฐฐ์ธ ์ ์๋ ๋จ์ด๊ฐ 5๊ฐ ๋ณด๋ค ์ ์๋ 0, 26๊ฐ ์ผ ๋ ๋ชจ๋ ๋จ์ด๋ฅผ ๋ฐฐ์ธ ์ ์์ผ๋ฏ๋ก n์ ์ถ๋ ฅํ๋ค.
๋ฐฑํธ๋ํน์ ํ ๋๋ a~z๊น์ง ์์ฐจ์ ์ผ๋ก ํ์ตํ๊ธฐ ๋๋ฌธ์ ์์ ์ธ๋ฑ์ค๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ถ๊ฐํด์ ์ด๋ฏธ ์ง๋๊ฐ ๊ณณ์ ํ์ํ์ง ์๋๋ก ํ๋ค.
Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ1062 {
static boolean[] alphabet;
static String[] words;
static int answer = Integer.MIN_VALUE;
static int k,n;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] s = br.readLine().split(" ");
n = Integer.parseInt(s[0]);
k = Integer.parseInt(s[1]);
words = new String[n];
for(int i = 0; i<n; i++){
String str = br.readLine();
//๋ชจ๋ ๋จ์ด๊ฐ anta์ tica๋ฅผ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๊ณต๋ฐฑ์ผ๋ก ๋ฐ๊ฟ์ ์ฒ๋ฆฌ
//ํ์๋ก ๋ฐฐ์์ผ ํ๋ ์ํ๋ฒณ a, c, i, n, t ๊ฐ ์์
str = str.replace("anta", "");
str = str.replace("tica", "");
words[i] = str;
}
if(k<5) {
// 5๊ฐ๋ณด๋ค ์ ์ผ๋ฉด a, c, i, n, t ๋ฅผ ๋ฐฐ์ฐ์ง ๋ชปํจ
System.out.println(0);
return;
} else if(k==26) {
// ๋ชจ๋ ์ํ๋ฒณ์ ๋ค ๋ฐฐ์ฐ๋ ๊ฒฝ์ฐ
System.out.println(n);
return;
}
alphabet = new boolean[26];
alphabet[0] = true; //a
alphabet[2] = true; //c
alphabet[8] = true; // i
alphabet[13] = true; //n
alphabet[19] = true; //t
studyWord(1,5);
System.out.println(answer);
}
public static void studyWord(int start, int alphabetCnt){
// ๋ฐฑํธ๋ํน์ ์ด์ฉํด์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ํ์.
// 0~26์ผ๋ก ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ start ๋งค๊ฐ๋ณ์๋ก ์ด๋ฏธ ์ง๋์จ ๊ณณ์ ํ์ํ์ง ์๊ฒ ํด์ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์.
if(alphabetCnt == k){
int cnt = 0;
for(int i = 0; i<n; i++){
boolean flag = true;
for(int j = 0; j< words[i].length(); j++){
// words[i]์ ํฌํจ๋ ์ํ๋ฒณ ์ค์ ์๋ฐฐ์ด ์ํ๋ฒณ์ด ์๋์ง ๊ฒ์ฌ
if(!alphabet[words[i].charAt(j) - 'a']){
flag = false;
break;
}
}
if(flag) cnt++;
}
answer = Math.max(answer, cnt);
return;
}
for(int i = start; i<26; i++){
if(!alphabet[i]){
alphabet[i] = true;
studyWord(i,alphabetCnt+1);
alphabet[i] = false;
}
}
}
}
๋ฐ์ํ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][๋ฐฑ์ค] 1806๋ฒ ๋ถ๋ถํฉ (0) | 2022.05.18 |
---|---|
[Algorithm/Java][๋ฐฑ์ค] 1700๋ฒ ๋ฉํฐํญ ์ค์ผ์ค๋ง (0) | 2022.05.17 |
[Algorithm/Java][๋ฐฑ์ค] 2504๋ฒ ๊ดํธ์ ๊ฐ (0) | 2022.05.11 |
[Algorithm/Java][๋ฐฑ์ค] 1987๋ฒ ์ํ๋ฒณ (0) | 2022.05.08 |
[Algorithm/Java][๋ฐฑ์ค] 2467๋ฒ ์ฉ์ก (0) | 2022.05.03 |