전화번호 목록을 오름차순으로 정렬한다.
정렬하고 나서는 i번째가 i+1번째의 접두어가 되는지 확인만 하면 된다.
arr = ["123", "11", "112", "14", "13", "132", "12123423"]
print(sorted(arr)) # ['11', '112', '12123423', '123', '13', '132', '14']
이렇게 정렬된 결과를 보면 왜 그런지 쉽게 이해가 갈 것이다.
파이썬에서 문자열을 정렬할 때,
sort()
나sorted()
는 문자열 내의 하나하나의 유니코드를 기준으로 정렬한다.print(ord("1")) # 49 print(ord("2")) # 50
import sys
def is_consist(phones: list):
for i in range(0, len(phones) - 1):
if phones[i] == phones[i + 1][0 : len(phones[i])]:
return False
return True
t = int(input()) # 테스트케이스 수
for _ in range(t):
n = int(input()) # 전화번호 수
phones = [] # 전화번호 목록
for _ in range(n): phones.append(sys.stdin.readline().strip())
phones.sort()
if is_consist(phones) == True:
print("YES")
else:
print("NO")