문제
왼쪽과 같이 데이터가 주어진다.
첫째 줄은 테스트 케이스의 개수(f)다.
둘째 줄은 하나의 테스트 케이스에 포함된 데이터의 개수(n)이다.
셋째 줄부터 n개의 데이터가 주어진다.
각 데이터는 전화번호를 의미하며, 다른 전화번호의 접두어가 될 수없다.
모든 전화번호에 접두어가 없다면 YES를 출력하고 하나라도 접두어가 있다면 NO를 출력한다.
(이 문제의 경우 2123이 21235의 접두어가 될 수 있으므로 NO가 출력된다.)
문제 풀이
1. n개의 데이터를 문자 형태로 리스트에 입력 받는다.
2. 정렬한다.
3. 리스트의 각 인덱스의 뒤에 위치한 문자와 비교한다.
- 접두어가 될 수 있다면 NO를 출력한 뒤 break로 빠져나온다.
- 접두어가 될 수 없다면 계속해서 진행하고 for문이 종료되면 YES를 출력한다.
코드
sys.stdin.readline()을 사용해야 합니다. input()을 하면 시간초과가 나옵니다.
많은 양의 데이터를 읽을 때는 sys.stdin.readline()이 유리하다고 합니다.
import sys
# sys.stdin = open("C:/Users/JIn/PycharmProjects/coding_Test/input.txt", "rt")
f = int(sys.stdin.readline())
for _ in range(f):
n = int(sys.stdin.readline())
numberList = [sys.stdin.readline().strip() for _ in range(n)]
numberList.sort()
for i in range(n - 1):
if numberList[i] == numberList[i + 1][:len(numberList[i])]:
print("NO")
break
else:
print("YES")
'코딩 테스트' 카테고리의 다른 글
[구현, 프로그래머스] 쿼드 압축 후 개수세기 (0) | 2021.03.22 |
---|---|
[백준 1599] 민식어 (0) | 2021.03.13 |
[백준 5014] 스타트링크 (0) | 2021.02.28 |
[백준 11508] 2+1 세일 (0) | 2021.02.28 |
[백준 13458] 시험 감독 (0) | 2021.02.24 |