본문 바로가기

알고리즘/백준 (Pyhthon)

[알고리즘] 백준 5052 전화번호 목록 / 파이썬

www.acmicpc.net/problem/5052

 

5052번: 전화번호 목록

첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 ��

www.acmicpc.net

 

왜 딕셔너리를 생각한거지,,? 딕셔너리 한번 써보고 싶었나보다

def sol():
    dic = {}
    N = int(input())
    for _ in range(N):
        num = input()
        dic[len(num)] = dic.get(len(num), []) + [num]
    for k1, v1 in dic.items():
        for k2, v2 in dic.items():
            if k1 >= k2: continue
            for val1 in v1:
                for val2 in v2:
                    if val1 == val2[:len(val1)]: return 'NO'
    return 'YES'

for _ in range(int(input())):
    print(sol())

 

다른 사람 풀이

리스트, 정렬을 이용해 간단히 풀이가능하다!

def solve(book):
    for p1, p2 in zip(book, book[1:]):
        if p2.startswith(p1):
            return False      
    return True

T = int(r())
for _ in range(T):
    N = int(r())
    flag = True
    book = []
    for _ in range(N):
        book.append(input())

    book.sort()
    if solve(book):
        print("YES")
    else:
        print("NO")