๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/1062
ํ์ด
์กฐํฉ๊ณผ ๋ธ๋ฃจํธํฌ์ค๋ฅผ ์ด์ฉํ ๋ฌธ์ ์๋ค. ์ฌ๊ท์ ๊น์ด์ ์ฃผ์ด์ง๋ ๋จ์ด์ ๊ฐ์ N์ ๊ณ ๋ คํ๋ฉด ๋ธ๋ฃจํธํฌ์ค๊ฐ ๊ฐ๋ฅํ ๋ฌธ์ ๋ผ๋ ๊ฑธ ์ ์ ์๋ค. ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์งํํ๋ฉฐ ์ฝ์ ์ ์๋ ๋จ์ด์ ์๋ฅผ ์ต๋๊ฐ์ผ๋ก ๊ฐฑ์ ํด์ฃผ๋ฉด ๋๋ค.
- ์
๋ ฅ๋ฐ์ K์ ๊ฐ์ด 5๋ณด๋ค ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๊ณ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๋ค.
๋จ์ด๋ฅผ ์ฝ๊ธฐ ์ํด์๋ a, c, i, n, t ์ ์ด๋ 5๊ฐ์ ๊ธ์๋ฅผ ๊ฐ๋ฅด์ณ์ผ ํ๋๋ฐ ๊ฐ๋ฅด์น ์ ์๋ ๊ธ์๊ฐ 5๋ณด๋ค ์์ผ๋ฉด ์๋ฌด ๋จ์ด๋ ์ฝ์ ์ ์๋ค. - ์ ๋์ด์ ์ ๋ฏธ์ฌ๋ ๋ฏธ๋ฆฌ ์ ๊ฑฐํ๋ค.
a, c, i, n, t๋ ๋ฐ๋์ ๊ฐ๋ฅด์ณ์ผ ํ๋ ๋จ์ด์ด๊ธฐ ๋๋ฌธ์, ๋ฏธ๋ฆฌ ๊ฐ๋ฅด์ณค๋ค๊ณ ๊ฐ์ ํ๊ณ ์กฐํฉ์ ์ํํ ๊ฒ์ด๋ค. ์ ๋์ด์ ์ ๋ฏธ์ฌ๋ฅผreplace()
๋ฅผ ์ด์ฉํ์ฌ ์ ๊ฑฐํด์ฃผ๋ฉด ๋จ์ด์ ๊ธธ์ด๋ฅผ ์ค์ผ ์ ์๋ค. - ๊ฐ๋ฅด์น ๊ธ์์ ์๊ฐ K-5๊ฐ๊ฐ ๋๋ฉด ์ฌ๊ท๋ฅผ ์ข
๋ฃํ๋ค.
์กฐํฉ์ ์งํํ๋ฉฐ a, c, i, n, t๋ฅผ ์ ์ธํ๊ณ ๊ฐ๋ฅด์น ๊ธ์๋ค์ ๋ค ๊ณจ๋๋ค๋ฉด, ์ฝ์ ์ ์๋ ๋จ์ด์ ๊ฐ์๋ฅผ ์ธ๊ณ , ์ต๋๊ฐ์ ๊ฐฑ์ ํ๋ค.
์ ์ฒด ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_1062_๊ฐ๋ฅด์นจ {
static int N, K, M = 26, answer = 0;
static String[] words;
static boolean isTeached[];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
if(K<5) {
System.out.println(0);
System.exit(0);
}
words = new String[N];
isTeached = new boolean[M];
for (int i=0; i<N; i++) {
words[i] = br.readLine();
words[i].replace("anta", "");
words[i].replace("tica", "");
}
teachVitalAlphabet();
teach(0, 0);
System.out.println(answer);
}
static void teach(int cnt, int start) {
if(cnt==K-5) {
answer = Math.max(answer, countReadableWord());
return;
}
for (int i=start; i<M; i++) {
if(isTeached[i]) continue;
isTeached[i] = true;
teach(cnt+1, i+1);
isTeached[i] = false;
}
}
static void teachVitalAlphabet() {
isTeached['a'-'a'] = true;
isTeached['c'-'a'] = true;
isTeached['i'-'a'] = true;
isTeached['n'-'a'] = true;
isTeached['t'-'a'] = true;
}
static int countReadableWord() {
int result = 0;
for (int i=0; i<N; i++) {
boolean readable = true;
for (int j=0; j<words[i].length(); j++) {
int idx = words[i].charAt(j) - 'a';
if(!isTeached[idx]) {
readable = false;
break;
}
}
if(readable) result++;
}
return result;
}
}
์ฒ์์๋ ๋จ์ด์ ๋์ค์ง ์๋ ๊ธ์๋ค์ ์ด๋ฏธ ๊ฐ๋ฅด์น ๋จ์ด๋ก ์ฒ๋ฆฌํด๋๋ ค๊ณ ํ๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ๋ฅด์น ๊ธ์ ์ cnt
๊ฐ K-5
๊ฐ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ ธ์ต๋๋ค
๋ฅผ ๋ฐ์๋ค. (cnt
๋ isTeached
๊ฐ false
์์ true
๋ก ๋ฐ๋ ๋ +1์ด ๋๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.)
'๐๐ฅ๐ ๐จ๐ซ๐ข๐ญ๐ก๐ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 10942] ํฐ๋ฆฐ๋๋กฌ? (0) | 2023.08.31 |
---|---|
[๋ฐฑ์ค 6086] ์ต๋ ์ ๋ (0) | 2023.08.28 |
[๋ฐฑ์ค 2342] Dance Dance Revolution (0) | 2023.08.27 |
[๋ฐฑ์ค 16235] ๋๋ฌด ์ฌํ ํฌ (1) | 2023.08.27 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋์คํฌ ์ปจํธ๋กค๋ฌ (1) | 2023.08.27 |