이번 문제는 문자열 슬라이싱과 정렬을 통해 해결하였다. 우선 전화번호들을 입력 받을 때, 전화번호들을 전화번호의 오름차순으로, 길이의 오름차순으로 정렬하였다. 이렇게 정렬을 한 이유는 2중 for문으로 전화번호들을 비교하는 과정에서 현재 전화번호의 앞부분이 표준이 된 전화번호보다 클 경우에 가지치기를 할 수 있기 때문이다. 이 조건을 통과한 경우에만 표준 전화번호와 현재 전화번호의 슬라이싱 값을 비교하여 같을 경우에 정답 변수를 바로 False로 변환하고, 반복문을 종료시킨다. 바깥쪽 for문에서도 answer가 False일 경우 반복문을 종료하도록 하여 최대한 최적화 시켰다.
t=int(input())
for _ in range(t):
n=int(input())
num_book=sorted([str(input()) for _ in range(n)], key=lambda x:(x, len(x)))
answer=True
for i in range(n-1):
for j in range(i+1, n):
if len(num_book[i])>len(num_book[j]):
continue
if int(num_book[i])<int(num_book[j][:len(num_book[i])]):
break
if num_book[i]==num_book[j][:len(num_book[i])]:
answer=False
break
if not answer:
break
if not answer:
print("NO")
else:
print("YES")