여름의 서재

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

알고리즘/BOJ

[백준] 5052_전화번호 목록

엉아_ 2021. 10. 31. 00:54
728x90

📕 문제

https://www.acmicpc.net/problem/5052

 

5052번: 전화번호 목록

첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가

www.acmicpc.net

 

💡 풀이법

1. 전화번호의 정보를 먼저 모두 리스트에 담아주었다.

2. 각 전화번호 중에 접두사가 비슷한 것끼리 비교를 해주어야 하기 때문에 sort 함수를 이용해서 정렬을 해주었다.

3. 문자열들을 정렬해주게 되면 사전순으로 정렬이 된다. '9111', '911', '921'이라는 문자열 세 개가 있다면 '911', '9111', '921' 이렇게 정렬이 된다. 

4. 이제 정렬된 리스트를 돌면서 현재 인덱스의 값이 다음 인덱스의 접두사가 되면, 'NO'를 프린트하고 for문을 멈춘다. 리스트를 다 돌았는데 break 되지 않았다면 'YES'를 출력한다.

 

import sys
T = int(sys.stdin.readline())

for _ in range(T):
    N = int(sys.stdin.readline())
    numbers = [sys.stdin.readline().rstrip() for _ in range(N)]
    numbers.sort()

    for i in range(N-1):
        if numbers[i] == numbers[i+1][:len(numbers[i])]:
            print('NO')
            break
    else:
        print('YES')
Comments