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

Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2] ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก (Hash, ํ•ด์‹œ)

๋ฐ˜์‘ํ˜•
SMALL

๐Ÿง ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2. ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

๋ฌธ์ œ ์„ค๋ช…

์ „ํ™”๋ฒˆํ˜ธ๋ถ€์— ์ ํžŒ ์ „ํ™”๋ฒˆํ˜ธ ์ค‘, ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ, ๊ตฌ์กฐ๋Œ€ ์ „ํ™”๋ฒˆํ˜ธ๋Š” ์˜์„์ด์˜ ์ „ํ™”๋ฒˆํ˜ธ์˜ ์ ‘๋‘์‚ฌ์ž…๋‹ˆ๋‹ค.
- ๊ตฌ์กฐ๋Œ€ : 119
- ๋ฐ•์ค€์˜ : 97 674 223
- ์ง€์˜์„ : 11 9552 4421
์ „ํ™”๋ฒˆํ˜ธ๋ถ€์— ์ ํžŒ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด phone_book ์ด solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์–ด๋–ค ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฉด false๋ฅผ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด true๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

phone_book์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 1,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
- ๊ฐ ์ „ํ™”๋ฒˆํ˜ธ์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 20 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
- ๊ฐ™์€ ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ์ค‘๋ณตํ•ด์„œ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

phone_book return
["119", "97674223", "1195524421"] false
["123","456","789"] true
["12","123","1235","567","88"] false

์ถœ์ฒ˜

https://school.programmers.co.kr/learn/courses/30/lessons/42577?language=java 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ’ก ๋ฌธ์ œ ํ’€์ด

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ๋Š” ํ•ด์‹œ ์œ ํ˜•์œผ๋กœ ๋ถ„๋ฆฌํ•ด๋‘์—ˆ์ง€๋งŒ, ๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ๋„ ํ’€์ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‘ ์œ ํ˜• ๋ชจ๋‘ ํ’€์ดํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค :)

 

๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ

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

 

๋จผ์ € phone_book ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•ด์ค€๋‹ค.

์ฒซ๋ฒˆ์งธ ์ผ€์ด์Šค๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด, [119, 1195524421, 97674223] ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ๋‹ค. ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ "ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์‚ฌ์ธ ๊ฒฝ์šฐ"๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด i๋ฒˆ์งธ ๋ฌธ์ž์—ด์ด i+1๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ ์ ‘๋‘์‚ฌ์ธ์ง€๋งŒ ์ฒดํฌํ•˜๋ฉด ๋œ๋‹ค. ์ฆ‰, ์ •๋ ฌ ์—†์ด๋Š” ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์ •๋ ฌ์„ ํ•˜๊ณ ๋‚˜๋ฉด ํ•˜๋‚˜์˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ฒฐ๊ณผ ํŒ์ •์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด์ œ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ i๋ฒˆ์งธ ๋ฌธ์ž์—ด์ด i+1๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ ์ ‘๋‘์–ด์ธ์ง€ ํ™•์ธํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ ‘๋‘์‚ฌ์ธ ๊ฒฝ์šฐ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ์—†์œผ๋ฉด ๋งˆ์ง€๋ง‰์— true๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

for(int i = 0; i < phone_book.length - 1; i++) {
	if (phone_book[i+1].startsWith(phone_book[i])
    		return false;
}

String.startsWith(String) ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€์ƒ ๋ฌธ์ž์—ด์ด ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ ๋ฌธ์ž์—ด ๊ฐ’์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ง€๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค!

 

์œ„ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์ „์ฒด ์ฝ”๋“œ๋กœ ํ’€์–ด๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        Arrays.sort(phone_book);
        
        for (int i = 0; i < phone_book.length - 1; i++) {
            if (phone_book[i + 1].startsWith(phone_book[i])) return false;
        }
        
        return true;
    }
}

 

Hash(ํ•ด์‹œ)

phone_book ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ HashMap์— ์ถ”๊ฐ€ํ•˜๊ณ , ๊ฐ ๋ฌธ์ž์—ด์„ ๋Œ๋ฉด์„œ ๋ฌธ์ž์—ด์˜ ์ ‘๋‘์‚ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด์ด HashMap์— ํฌํ•จ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๋จผ์ € ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ HashMap์— ๋‹ด์•„์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด์„ ๋Œ๋ฉด์„œ ๊ฐ ๋ฌธ์ž์—ด์˜ ์ ‘๋‘์‚ฌ๊ฐ€ HashMap์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์ค€๋‹ค. ํฌํ•จ๋˜์–ด์žˆ์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ์—†์œผ๋ฉด ๋งˆ์ง€๋ง‰์— true๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์œ„ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์ „์ฒด ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        Map<String, Integer> map = new HashMap<>();
        
        for (int i = 0; i < phone_book.length; i++) {
            map.put(phone_book[i], i);
        }
        
        for (int i = 0; i < phone_book.length; i++) {
            for (int j = 0; j < phone_book[i].length(); j++) {
                if (map.containsKey(phone_book[i].substring(0, j))) return false;
            }
        }
        
        return true;
    }
}

 

โœจ ํฌ์ŠคํŒ…์„ ๋งˆ์น˜๋ฉฐ

๋ƒ…๋‹ค ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ๋ฆฌ๊ณ  ๊ณ„์† ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋– ์„œ ๊ฒฐ๊ตญ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ดค๋‹ค. ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ›„ ํ•˜๋‚˜์˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋„, Hash์˜ containsKey๋กœ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์‹ ๋ฐ•ํ•˜๊ฒŒ ๋Š๊ปด์กŒ๋‹ค. ์—ญ์‹œ ๋ฌธ์ œ๋ฅผ ์ผ๋‹จ ๋งŽ์ด ํ’€์–ด๋ณด๋Š” ๊ฒƒ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ ํšจ๊ณผ์— ์ง๋นต์ธ ๋“ฏ ํ•˜๋‹ค!

๋ฐ˜์‘ํ˜•
LIST