๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 1062๋ฒˆ: ๊ฐ€๋ฅด์นจ(์™„์ „ ํƒ์ƒ‰, ๋ฐฑํŠธ๋ž˜ํ‚น)

by ์ฃผ๋ฐœ2 2020. 3. 6.
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/1062

 

1062๋ฒˆ: ๊ฐ€๋ฅด์นจ

์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , K๋Š” 26๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๋‚จ๊ทน ์–ธ์–ด์˜ ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹จ์–ด๋Š” ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ธธ์ด๊ฐ€ 8๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 15๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋ชจ๋“  ๋‹จ์–ด๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค.

www.acmicpc.net

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static int N, K;
	static int max = 0;
	static boolean visit[] = new boolean[26];
	static String[] sArr;
	
	public static void dfs(int start, int count) {
		/*
		 * ๊ธฐ์ €์‚ฌ๋ก€: ์ฃผ์–ด์ง„ K๊ฐœ ๋งŒํผ ๋‹จ์–ด๋ฅผ ๊ณจ๋ž์„ ๋•Œ
		 * visit[]์— ์ฒดํฌ๋œ ๋‹จ์–ด๋“ค๊ณผ ๋น„๊ตํ•ด์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์˜ ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๊ธฐ.
		 */
		if(count == K) {
			int num = 0;
			for(int i=0; i<sArr.length; i++) {
				boolean flag = true;
				for(int j=0; j<sArr[i].length(); j++) {
					
					/* K๊ฐœ๋ฅผ ๊ณจ๋ž์„ ๋•Œ, ๊ณ ๋ฅธ ๋‹จ์–ด๋กœ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จ */
					if(!visit[sArr[i].charAt(j) - 97]) {
						flag = false;
						break;
					}
				}
				if(flag)	num ++;
			}
			max = Math.max(max, num);
			return;
		}
		
		// ์•„์ง K๊ฐœ๋ฅผ ๋ฐฐ์šฐ์ง€ ์•Š์€ ๊ฒฝ์šฐ -> ์™„์ „ ํƒ์ƒ‰(์•ŒํŒŒ๋ฒณ ๊ฐฏ์ˆ˜: 26๊ฐœ)
		for(int i=start; i<26; i++) {
			if(!visit[i]) {
				visit[i] = true;
				dfs(i, count + 1);
				visit[i] = false;
			}
		}
	}

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		sArr = new String[N];
		//char[] checkWords = {'a', 'n', 't', 'i', 'c'};
		
		// ๋ชจ๋“  ๋‹จ์–ด๋Š” "anta-'๋กœ ์‹œ์ž‘ํ•˜๊ณ , "-tica"๋กœ ๋๋‚จ. a n t i c
		if(K<5) {
			System.out.println("0");
			return;
		}
		
		// ์•ŒํŒŒ๋ฒณ = 26๊ฐœ์ด๋ฏ€๋กœ 26์ด๋ฉด ๋ชจ๋‘ ์ฝ์„ ์ˆ˜ ์žˆ์Œ.
		else if(K==26) {
			System.out.println(N);
			return;
		}
		else {
			// ์ ‘๋‘์‚ฌ anta ์™€ ์ ‘๋ฏธ์‚ฌ tica ์ œ๊ฑฐ.
			for(int i=0; i<N; i++) {
				String str = bf.readLine();
				sArr[i] = str.substring(4, str.length()-4);
			}
			
			// a n t i c 5๊ฐœ์˜ ๋‹จ์–ด๋Š” ๋ฐ˜๋“œ์‹œ ํฌํ•จํ•ด์•ผ ํ•˜๋ฏ€๋กœ -5
			K -= 5;
			
			// a n t i c -> ๋ฐฉ๋ฌธ ์ฒดํฌ
			visit['a' - 97] = true;
			visit['n' - 97] = true;
			visit['t' - 97] = true;
			visit['i' - 97] = true;
			visit['c' - 97] = true;
			
			// ์žฌ๊ท€ + ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ†ตํ•ด ์ตœ๋Œ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด ์ฐพ๊ธฐ
			dfs(0, 0);
			System.out.println(max);
		}
		
		bf.close();
	}

}

ํ’€์ด

๊ณจ๋“œ ๋ฌธ์ œ ์˜€์ง€๋งŒ ๋‚˜๋ฆ„ ์งง์•„ ๋ณด์—ฌ์„œ ๋ฅ์ฉ ๋ฌผ์—ˆ๋Š”๋ฐ.. ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค ........................................................

 

๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด N๊ฐœ์˜ ๋‹จ์–ด ์ค‘ K๊ฐœ์˜ ๋‹จ์–ด ๋งŒํผ ๊ธ€์ž๋ฅผ ํ•™์ƒ๋“ค์—๊ฒŒ ๊ฐ€๋ฅด์น˜๊ณ , ํ•™์ƒ๋“ค์ด ๋ฐฐ์šด K๊ฐœ์˜ ๋‹จ์–ด๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

๋‚จ๊ทน์–ธ์–ด์˜ ๋ชจ๋“  ๋‹จ์–ด๋Š” "anta" ๋กœ ์‹œ์ž‘ํ•˜๊ณ , "tica"๋กœ ๋๋‚œ๋‹ค.

์ฆ‰ ์œ„ 8๊ฐœ์ค‘ ์ค‘๋ณต๋˜๋Š” ๋‹จ์–ด๋Š” a n t i c ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ฃผ์–ด์ง„ K๊ฐ€ 5๊ฐœ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์–ด๋– ํ•œ ๋‹จ์–ด๋ฅผ ๊ฐ€๋ฅด์น˜๋”๋ผ๋„ ์•„๋ฌด ๋‹จ์–ด๋„ ์ฝ์„ ์ˆ˜ ์—†๋‹ค. => 0 ์ถœ๋ ฅ

๋ฐ˜๋Œ€๋กœ ๋งŒ์•ฝ ์ฃผ์–ด์ง„ K๊ฐ€ 26์ด๋ผ๋ฉด ? => ์•ŒํŒŒ๋ฒณ์€ 26๊นŒ์ง€๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. => N ์ถœ๋ ฅ

์ด์ œ 5๊ฐœ ~ 26๊ฐœ ์‚ฌ์ด๋ฅผ ์ƒ๊ฐํ•ด ๋ด์•ผ ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ๋ฐฐ์šฐ์ง€ ์•Š์€ ๋ชจ๋“  ๋‹จ์–ด๋“ค์— ๋Œ€ํ•ด ์™„์ „ ํƒ์ƒ‰ + ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ†ตํ•ด ๊ฐ€์žฅ ๋งŽ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ์ฐพ๋Š”๋‹ค.

 

๋จผ์ € ๋ชจ๋“  ๋‹จ์–ด์—๋Š” anta, tica๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ ‘๋‘์‚ฌ "anta"์™€ ์ ‘๋ฏธ์‚ฌ "tica"๋Š” ์ œ๊ฑฐํ•œ๋‹ค.

๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ํ•™์ƒ๋“ค์—๊ฒŒ a n t i c 5๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ๊ฐ€๋ฅด์นœ ์…ˆ์ด๋‹ค. ๋”ฐ๋ผ์„œ K์˜ ๊ฐ’์„ 5๋งŒํผ ๋บ€๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฐฐ์› ๊ฑฐ๋‚˜, ๋ฐฐ์šฐ์ง€ ๋ชปํ•œ ์•ŒํŒŒ๋ฒณ๋“ค์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด boolean[] visit ๋ผ๋Š” ๋ฐฐ์—ด์„ ์„ ์–ธํ–ˆ๋Š”๋ฐ,.

๋งŒ์•ฝ a๋ฅผ ๋ฐฐ์› ๋‹ค๋ฉด => visit[0] = true๋กœ, c๋ฅผ ๋ฐฐ์› ๋‹ค๋ฉด visit[2] = true๋กœ

์•ŒํŒŒ๋ฒณ์„ ์ˆซ์ž๋กœ ๋งค์นญ์‹œ์ผœ์„œ(97์„ ๋นผ๋ฉด ๋œ๋‹ค. ์•„์Šคํ‚ค์ฝ”๋“œ) ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ true๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค.

a n t i c ์ด 5๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์€ ๋ฌด์กฐ๊ฑด ๊ฐ€๋ฅด์ณ์•ผ ํ•˜๋ฏ€๋กœ, ๊ธฐ๋ณธ true๋กœ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿผ ๊ฐ๊ฐ visit[0] = visit[13] = visit[19] = visit[8] = visit[2] = true ๊ฐ€ ๊ธฐ๋ณธ ๋ฒ ์ด์Šค๋‹ค.

 

๊ทธ ๋‹ค์Œ์œผ๋กœ, ์•ŒํŒŒ๋ฒณ์—์„œ K-5๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์„ ์กฐํ•ฉ์œผ๋กœ ๋ฝ‘์•„์ค˜์•ผ ํ•œ๋‹ค.(์ˆœ์„œ๋Š” ์ƒ๊ด€์—†๋‹ค.)

a b c ๋ฅผ ์•Œ๋˜ b a c ๋ฅผ ์•Œ๋˜ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด๋Š” ๋˜‘๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—, ์ˆœ์„œ์˜ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

 

์žฌ๊ท€ํ˜ธ์ถœ์„ ํ†ตํ•ด K๊ฐœ๋งŒํผ ๊ณจ๋ž๋‹ค๋ฉด, ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ์นด์šดํŠธ ํ•ด์•ผ ํ•œ๋‹ค.

๋งŒ์•ฝ "abcde"๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, a~e๊นŒ์ง€ 5๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ 

ํ˜„์žฌ ๊ทธ ๋ฌธ์ž๋ฅผ ์ธ๋ฑ์Šค๋กœ ํ•˜๋Š” visit[] ๋ฐฐ์—ด์ด false๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด, ๊ทธ ๋‹จ์–ด๋Š” ๋ฐฐ์šฐ์ง€ ์•Š์€ ๋‹จ์–ด๋‹ค.

๋”ฐ๋ผ์„œ ๋’ค์—๋Š” ๋” ๋ณผํ•„์š”์—†์ด false๋กœ ์„ค์ •ํ•˜๊ณ  for๋ฌธ์„ ํƒˆ์ถœํ•˜๋ฉด ๋œ๋‹ค.

๋งŒ์•ฝ ๋ชจ๋“  ๋‹จ์–ด("abcde")๋ฅผ ํƒ์ƒ‰ํ–ˆ๋Š”๋ฐ, ๋ชจ๋“  visit[] ๋ฐฐ์—ด์ด true๋ผ๋ฉด ? 

๊ทธ ๋‹จ์–ด๋Š” ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์ด๋ฏ€๋กœ, ++ํ•ด์ค€๋‹ค.

๊ทธ ํ›„ ์ด์ „์— K๊ฐœ๋ฅผ ๊ณจ๋ž์„๋•Œ, ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์™€ ๋น„๊ตํ•ด ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๋Š”๋‹ค.

 

 

 

๋„ˆ๋ฌด ์–ด๋ ต๋‹ค ........ ์•„์ง ์ˆœ์—ด๊ณผ ์กฐํ•ฉ, ์žฌ๊ท€, ๋ฐฑํŠธ๋ž˜ํ‚น ์— ๋Œ€ํ•œ ๊ฐœ๋…๋„ ๋ถ€์กฑํ•˜๊ณ  ์ดํ•ด๋„ ๋ถ€์กฑํ•˜๋‹ค...

๋จธ๋ฆฟ์†์œผ๋กœ ์•„๋ฌด๋ฆฌ ์ดํ•ดํ•˜๋ ค๊ณ  ํ•ด๋„ ์ž˜ ์•ˆ๋˜๊ณ  ์™ธ์šฐ๋Š” ๊ฒƒ ๊ฐ™๋‹ค ......

์ฃผ๋ง์ด๋‚˜ ๋‹ค์Œ์ฃผ๋‚ด๋กœ ์‹œ๊ฐ„๋‚ด์„œ ์ˆœ์—ด ์กฐํ•ฉ ์™„์ „ํƒ์ƒ‰์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•œ๋ฒˆ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค..

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€