웹찢남

[백준 5052 전화번호 목록 문제] PYTHON 본문

백준 Algorithm

[백준 5052 전화번호 목록 문제] PYTHON

harry595 2021. 7. 27. 23:02

 

이번 문제는 접두어를 체크하는 문제로 파이썬 문자열의 특성과 sort의 특성만

잘 이해하고 있다면 어렵지 않은 문제다.

파이썬에서 [123, 12000, 123000]을 sort하면 크기 순서대로 같은 값이 나오지만

['123', '12000', '123000']을 sort하면 ['12000', '123', '123000'] 이렇게 맨 앞의 문자열을 기준으로 정렬한다.

이 특성을 살리면 배열의 앞과 뒤만 잘 확인하면 접두어를 체크할 수 있다,

 

from sys import stdin
input = stdin.readline

N = int(input())
for _ in range(N):
    answerflag = True
    M = int(input())
    nlist = []
    for j in range(M):
        nlist.append(input().strip())
    nlist.sort()
    for k in range(len(nlist)-1):
        if nlist[k] in nlist[k+1][0:len(nlist[k])]:
            print('NO')
            answerflag = False
            break
        else:
            continue
    if answerflag:
        print('YES')

 

많은 input을 받기 때문에 sys의 stdin.readline을 통해 시간을 단축시켜야 시간초과가 안생긴다.

또한 stdin.readline은 \n까지 받기 때문에 strip을 통해 제거해야한다.

Comments