Jun's Development Journey
[BOJ] 1062번 가르침 본문
문제
1062번: 가르침
첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문
www.acmicpc.net
풀이
- 중요한 점-
1) K는 반드시 포함 되어야 하는 5 알파벳 수(a,c,i,n,t)의 갯수보다 작으면 단어를 배울 수가 없다.
2) 단어에 반드시 포함되는 앞뒤에 쓰이는 알파벳은 미리 체크해놓고 문자열을 가운데만 잘라서 이용한다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
import java.util.StringTokenizer;
import java.util.Map.*;
public class BOJ_1062
{
static ArrayList<String> list;
static boolean[] visited;
static int limit = 5, max = Integer.MIN_VALUE;
static void backtracking(int st, int depth, int std){
if(depth == std){
int possible=0;
for(String str : list){
boolean chk = true;
for(int i=0;i<str.length();i++){
if(!visited[str.charAt(i)-'a']){
chk = false;
break;
}
}
if(chk)
possible++;
}
max = possible > max ? possible : max;
return;
}
for(int i=st;i<26;i++){
if(!visited[i]){
visited[i] = true;
backtracking(i+1,depth+1,std);
visited[i] = false;
}
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
visited = new boolean[26];
if(K<limit)
System.out.println(0);
else if(K==26)
System.out.println(N);
else{
K-=limit;
list = new ArrayList<>();
//a,c,i,n,t 방문 표시
int[] fore = {'a'-'a','c'-'a','i'-'a','n'-'a','t'-'a'};
for(int i=0;i<fore.length;i++)
visited[fore[i]] = true;
//단어 입력 및 카운팅
for(int i=0;i<N;i++){
String word = br.readLine();
String cutted = word.substring(3,word.length()-4);
list.add(cutted);
}
backtracking(0,0,K);
if(max==0)
System.out.println(0);
else
System.out.println(max);
}
}
}
'BOJ > BruteForce' 카테고리의 다른 글
[BOJ] 1018번 체스판 다시 칠하기 (0) | 2021.05.26 |
---|---|
[BOJ] 2992번 크면서 작은 수 (0) | 2021.04.21 |
[BOJ] 15728번 에리-카드 (0) | 2021.04.02 |
[BOJ] 2798번 블랙잭 (0) | 2021.03.10 |
[BOJ] 1107 리모컨 (0) | 2021.02.19 |