문제

왼쪽과 같이 데이터가 주어진다.

첫째 줄은 테스트 케이스의 개수(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

+ Recent posts