์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ํ ์คํธ ์ฐ์ต, https://programmers.co.kr/learn/challenges
๋ฌธ์ ์ค๋ช
์ ํ๋ฒํธ๋ถ์ ์ ํ ์ ํ๋ฒํธ ์ค, ํ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ด์ธ ๊ฒฝ์ฐ๊ฐ ์๋์ง ํ์ธํ๋ ค ํฉ๋๋ค.
์ ํ๋ฒํธ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ, ๊ตฌ์กฐ๋ ์ ํ๋ฒํธ๋ ์์์ด์ ์ ํ๋ฒํธ์ ์ ๋์ฌ์
๋๋ค.
- ๊ตฌ์กฐ๋ : 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 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
์์์ ์ค๋ช
ํ ์์ ๊ฐ์ต๋๋ค.
์
์ถ๋ ฅ ์ #2
ํ ๋ฒํธ๊ฐ ๋ค๋ฅธ ๋ฒํธ์ ์ ๋์ฌ์ธ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก, ๋ต์ true์
๋๋ค.
์
์ถ๋ ฅ ์ #3
์ฒซ ๋ฒ์งธ ์ ํ๋ฒํธ, “12”๊ฐ ๋ ๋ฒ์งธ ์ ํ๋ฒํธ “123”์ ์ ๋์ฌ์
๋๋ค. ๋ฐ๋ผ์ ๋ต์ false์
๋๋ค.
# ํด์ฌ ๊ตฌํ
def solution(phone_book):
answer = True
hash_map = {}
for i in phone_book:
hash_map[i] = 1
for i in phone_book:
chk = ""
for j in i:
chk += j
if chk in hash_map and chk != i:
answer = False
return answer
# collections ์ด์ฉํ ํด์ฌ ๊ตฌํ
import collections
def solution(phone_book):
answer = True
hash_book = collections.Counter(phone_book)
for i in phone_book:
chk = ""
for j in i:
chk += j
if chk in hash_book and chk != i:
answer = False
return answer
# ๊ฐ์ ์์ด๋์ด๋ก ํด์ฌ ์ฌ์ฉํ์ง ์๊ณ list๋ฅผ ์ฌ์ฉํด ๋ดค์ผ๋ ํจ์จ์ฑ์์ ๋ฌธ์
# list๋ ์ ํ ํ์ O(N), ํด์ฌ๋ ๋์
๋๋ฆฌ ์๋ฃํ์ผ๋ก O(1)
def solution(phone_book):
answer = True
for i in phone_book:
chk = ""
for j in i:
chk += j
if chk in phone_book and chk != i:
answer = False
return answer
# zip์ผ๋ก phonebook, phoneBook[1:] ๋ฌถ์ด์ ์๋ค๊ฐ ๋น๊ต
# ๊ฒน์น์ง ์๋ p2๊ฐ p1์ผ๋ก ์์ํ๋์ง ํ์ธ
def solution(phoneBook):
phoneBook = sorted(phoneBook)
print(zip(phoneBook, phoneBook[1:]))
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
๋ฆฌ์คํธ๋ ์ ํ ํ์์ผ๋ก O(N)์ ์๊ฐ →→→→→ ํด์ ๋์ ๋๋ฆฌ ์๋ฃํ์ผ๋ก O(1)๋ก ๊ฐ์ ํ๊ธฐ