여름의 서재
[백준] 5052_전화번호 목록 본문
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')
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 2096_내려가기 (dp 이용) (0) | 2021.12.07 |
---|---|
[백준] 14888_연산자 끼워넣기 (0) | 2021.12.07 |
[백준] 2688_줄어들지 않아 (dp 이용) (0) | 2021.10.31 |
[백준] 14719_빗물 (0) | 2021.10.30 |
[백준] 20057_마법사 상어와 토네이도 (0) | 2021.10.30 |