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

[๋ฐฑ์ค€] 5052๋ฒˆ: ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

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

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

 

5052๋ฒˆ: ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

๋ฌธ์ œ ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ์ด ๋ชฉ๋ก์ด ์ผ๊ด€์„ฑ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์ด ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด, ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž ๊ธด๊ธ‰์ „ํ™”: 911 ์ƒ๊ทผ: 97 625 999 ์„ ์˜: 91 12 54 26 ์ด ๊ฒฝ์šฐ์— ์„ ์˜์ด์—๊ฒŒ ์ „ํ™”๋ฅผ ๊ฑธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ์ „ํ™”๊ธฐ๋ฅผ ๋“ค๊ณ  ์„ ์˜์ด ๋ฒˆํ˜ธ์˜ ์ฒ˜์Œ ์„ธ ์ž๋ฆฌ๋ฅผ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„ ๋ฐ”๋กœ ๊ธด๊ธ‰์ „ํ™”๊ฐ€

www.acmicpc.net

์ฝ”๋“œ

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt(bf.readLine());	// ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜
		for(int tc=0; tc<t; tc++) {
			int n = Integer.parseInt(bf.readLine());	// ์ „ํ™”๋ฒˆํ˜ธ ์ˆ˜
			String[] phones = new String[n];	// ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก
			String result = "YES";	// ๊ฒฐ๊ณผ ์ถœ๋ ฅ
			
			for(int i=0; i<n; i++) 
				phones[i] = bf.readLine();
			
			Arrays.sort(phones);
			for(int i=0; i<n-1; i++) {
				// ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด ์ธ ๊ฒฝ์šฐ
				if(phones[i+1].startsWith(phones[i])) {
					result = "NO";
					break;
				}
			}
			System.out.println(result);
		}
		bf.close();
	}

}

ํ’€์ด

๊ธฐ์กด ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์™€ ๋™์ผํ•œ ๋ฌธ์ œ๋‹ค.

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

 

ํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ํ’€์—ˆ๋˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ชจ๋“  ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์— ๋Œ€ํ•ด ์™„์ „ ํƒ์ƒ‰ O(n^2) ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ฉด, ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด ๋ฌธ์ œ์—์„œ๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” 50, ์ „ํ™”๋ฒˆํ˜ธ ์ˆ˜๋Š” 10,000 ์ด๋ฏ€๋กœ O(50*10000*10000) ์œผ๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋Ÿผ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋Š” ์ •๋ ฌ์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ 123, 12, 1234 ๋ผ๋ฉด ์ •๋ ฌ์„ ํ•˜๋ฉด 12, 123, 1234 ์™€ ๊ฐ™์ด ๋œ๋‹ค.

๊ทธ๋Ÿผ ๋ชจ๋“  ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์‚ฌํ•  ํ•„์š”์—†์ด ์ด์ „์˜ ๋ฒˆํ˜ธ์™€ ์ ‘๋‘์–ด ๊ด€๊ณ„์ธ์ง€๋งŒ ํŒŒ์•…ํ•˜๋ฉด ๋œ๋‹ค.

๋˜ํ•œ ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก์—, ํ•˜๋‚˜๋ผ๋„ ์ ‘๋‘์–ด ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋ฒˆํ˜ธ๋ผ๋ฉด, ๋‹ค๋ฅธ ์ „ํ™”๋ฒˆํ˜ธ๋Š” ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

๋”ฐ๋ผ์„œ ์ ‘๋‘์–ด๋ฅผ ํ™•์ธํ–ˆ์„ ๊ฒฝ์šฐ, break๋ฅผ ํ†ตํ•ด ํƒˆ์ถœํ•จ์œผ๋กœ์จ ์‹œ๊ฐ„์„ ์ข€ ๋” ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

* ์ด ๋ฌธ์ œ๋Š” ํŠธ๋ผ์ด(Trie) ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค. ํŠธ๋ผ์ด๋Š” ๋ฌธ์ž์—ด์—์„œ์˜ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ด๋‹ค.

ํŠธ๋ผ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ?

https://jason9319.tistory.com/129

 

[์ž๋ฃŒ๊ตฌ์กฐ]ํŠธ๋ผ์ด(Trie)

ํŠธ๋ผ์ด(Trie)๋Š” ๋ฌธ์ž์—ด์—์„œ์˜ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ •์ˆ˜ํ˜• ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด์„œ ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด O(logN)์˜ ์‹œ๊ฐ„๋งŒ์— ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌธ์ž์—ด์—์„œ ์ด์ง„๊ฒ€..

jason9319.tistory.com

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€