주어진 전화번호 목록 중에서 한 전화번호가 다른 전화번호의 접두사가 되는 것이 있는지 확인하는 문제입니다. 트리의 확장판인 트라이를 사용하는 기초적인 문제 정도 되는 것 같습니다. 트라이는 자식 노드로 가는 간선에 이름이 붙어있습니다. 범위는 문제에 따라 다르겠지만 여기서는 트라이의 각 노드가 자식 노드로 가는 간선 10개를 가지며 각각의 이름은 0
, 1
, … , 9
가 됩니다. 그리고 어떤 간선에 노드가 연결되어있다면 루트로부터 지금까지 지나온 간선을 접두사로 하는 문자열이 있었다는 것을 의미합니다. 그래서 접두사 트리라고 부르기도 합니다.
이제 이 트라이를 이용하여 전화번호를 입력받음과 동시에 트라이를 구성합니다. 지나온 길은 표시하고 문자열의 끝 또한 표시합니다. 그리고 트라이를 구성하면서 문자열의 끝임이 표시된 노드를 발견하거나 끝임을 표시하려는 노드가 이미 방문한 노드라면 한 번호가 다른 번호의 접두사가 되는 경우이므로 NO
, 위와 같은 경우가 한 번도 나오지 않았다면 YES
를 출력하면 됩니다.