๐Ÿงฉ Algorithm/[Programmers] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ๋“์  KIT

[Programmers/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ๋“์  KIT] ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

devCloud 2026. 3. 19. 22:06

[Programmers] ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

Level 2 | #ํ•ด์‹œ

1. ๋ฌธ์ œ ์š”์•ฝ

์ „ํ™”๋ฒˆํ˜ธ๋ถ€์— ์ ํžŒ ์ „ํ™”๋ฒˆํ˜ธ ์ค‘, ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ ‘๋‘์–ด๊ฐ€ ์กด์žฌํ•˜๋ฉด False๋ฅผ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด True๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

2. ํ’€์ด 1: ์ •๋ ฌ(Sorting) ํ™œ์šฉ

def solution(phone_book):
    phone_book.sort() # ๋ฌธ์ž์—ด ๊ธฐ์ค€ ์ •๋ ฌ
    for i in range(1, len(phone_book)):
        if phone_book[i].startswith(phone_book[i - 1]):
            return False
    return True

๐Ÿ“Œ ์ •๋ ฌ ์‹œ ์ธ์ ‘ ์›์†Œ๋งŒ ๋น„๊ตํ•˜๋Š” ์ด์œ : ๋ฌธ์ž์—ด ์ •๋ ฌ์€ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ, ์ ‘๋‘์‚ฌ ๊ด€๊ณ„์ธ ๋ฒˆํ˜ธ๋“ค์€ ๋ฐ˜๋“œ์‹œ ์„œ๋กœ ๋ถ™์–ด์„œ ์ •๋ ฌ๋œ๋‹ค. (์˜ˆ: "119", "1195")

๐Ÿ“Œ startswith vs in: in์€ ์ค‘๊ฐ„์— ํฌํ•จ๋œ ๊ฒฝ์šฐ๋„ ์ฐพ์•„๋‚ด์ง€๋งŒ, startswith๋Š” ์˜ค์ง ์ ‘๋‘์‚ฌ(์‹œ์ž‘ ๋ถ€๋ถ„)๋งŒ ํ™•์ธํ•˜๋ฏ€๋กœ ๋ฌธ์ œ ์˜๋„์— ์ •ํ™•ํžˆ ๋ถ€ํ•ฉํ•œ๋‹ค.

3. ํ’€์ด 2: ํ•ด์‹œ(Hash) ํ™œ์šฉ

def solution(phone_book):
    hash_map = set(phone_book)
    
    for phone in phone_book:
        for i in range(1, len(phone)):
            if phone[:i] in hash_map:  # O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„ ์กฐํšŒ
                return False
    
    return True

๐Ÿ“Œ ํ•ด์‹œ์˜ ํ•ต์‹ฌ: ๊ฐ ๋ฒˆํ˜ธ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ ‘๋‘์‚ฌ ์Šฌ๋ผ์ด์‹ฑ(phone[:i]) ๊ฒฐ๊ณผ๊ฐ€ set์— ์กด์žฌํ•˜๋Š”์ง€ O(1)์˜ ์†๋„๋กœ ํ™•์ธํ•œ๋‹ค.

4. ๐Ÿ†š ๋‘ ๋ฐฉ์‹ ๋น„๊ต

๊ตฌ๋ถ„ ์ •๋ ฌ ๋ฐฉ์‹ ํ•ด์‹œ ๋ฐฉ์‹
์‹œ๊ฐ„ ๋ณต์žก๋„ O(nlog n) O(nm)
ํŠน์ง• ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ž„ ๋ฌธ์ œ ์˜๋„(ํ•ด์‹œ)์— ์ถฉ์‹คํ•จ

* n: ์ „ํ™”๋ฒˆํ˜ธ ๊ฐœ์ˆ˜, m: ์ „ํ™”๋ฒˆํ˜ธ์˜ ํ‰๊ท  ๊ธธ์ด