문제링크 : https://www.acmicpc.net/problem/5052
이번 문제는 배열에 전화번호 목록을 입력받아온 뒤 정렬을 해서 첫번째꺼부터 마지막꺼까지 서로 다음 번호와 비교만해봐도 앞에 문자가 겹치는 지 알 수 있다. 즉, 바로 뒤에 있는 번호만 확인하면 된다.
import sys
input = sys.stdin.readline
def solution(numbers):
for i in range(len(numbers) - 1):
if numbers[i] == numbers[i+1][0:len(numbers[i])]:
print("NO")
return
print("YES")
t = int(input())
for _ in range(t):
n = int(input())
numbers = []
for _ in range(n):
numbers.append(input().strip())
numbers.sort()
solution(numbers)
풀고나서 알게 된 문자열이 특정문자로 시작하는지 여부를 알려주는 함수
startswith(시작하는 문자)를 이용한 풀이이다. 훨씬 간단하게 풀리는걸 볼 수 있다.
import sys
input = sys.stdin.readline
def solution():
n = int(input())
numbers = sorted([input().rstrip() for _ in range(n)])
res = True
for i in range(n-1):
if(numbers[i+1].startswith(numbers[i])):
res = False
break
print("YES" if res else "NO")
t = int(input())
for _ in range(t):
solution()