08
25

https://school.programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

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

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

programmers.co.kr

ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ 

์ฒ˜์Œ์— ์ง„์งœ ๊ฐ์ด ์•ˆ์žกํ˜”๋‹ค. ์ ‘๋‘์–ด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์„œ contains๋ฅผ ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๊ฒŒ Hash๊ฐ€ ๋งž๋‚˜?? ์ด๋Ÿฐ ์ƒ๊ฐ์ด ๋จธ๋ฆฌ ์†์— ๋งด๋Œ์•˜๋‹ค.

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        TreeSet<String> ts = new TreeSet();
        for(String phone: phone_book){
            ts.add(phone);
        }
        
        // ๊ฐ ์ „ํ™”๋ฒˆํ˜ธ์˜ ๋ชจ๋“  ์ ‘๋‘์–ด๋ฅผ ํ™•์ธ
        for (String phone : phone_book) {
            for (int i = 1; i < phone.length(); i++) { // ๊ธธ์ด๋Š” 1์ด์ƒ
                String prefix = phone.substring(0, i);
                if (ts.contains(prefix)) {
                    answer = false;
                }
            }
        }
        
        return answer;
    }
}

2์ค‘ ํฌ๋ฌธ์€ ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜๋„ contains๋กœ ํ•ด์„œ ์กฐํšŒ ๋•Œ O(1)์„ ํ•ด์ค˜์„œ ์ข€ ๋น ๋ฅธ ๊ฒŒ ์•„๋‹๊นŒ

์ค‘๋ณต๋œ ๋ฒˆํ˜ธ๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ HashSet์— ๋„ฃ์–ด์„œ ์กฐํšŒ ์„ฑ๋Šฅ์„ ์˜ฌ๋ ค์ฃผ๊ณ , ๊ฐ ๋ฒˆํ˜ธ๋ฅผ ๋Œ๋ฉด์„œ substring์„ ์ž˜๋ผ ์ด๊ฒŒ HashSet์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ธ์ง€ ์ฐพ๋Š”๋‹ค. ์ด๋Ÿฌ๋ฉด ์กด์žฌํ•  ๊ฒฝ์šฐ ์ ‘๋‘์–ด๊ฐ€ ์žˆ๋Š” Set์ด ๋œ๋‹ค.


# ์ถ”๊ฐ€ ๊ณต๋ถ€

substring์€ ` [ startIndex, endIndex ) ` ๋‹ค. ์ด์ƒ, ๋ฏธ๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ๋œ๋‹ค.

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT