본문 바로가기
알고리즘

백준 5052 전화번호 목록 파이썬

by meanjung 2023. 8. 11.

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

 

5052번: 전화번호 목록

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

www.acmicpc.net

 

모든 문자열 비교를 해야 하나.. 그치만 시간초과가 날텐데...

 

하면서 고민했다.

 

그런데 정렬을 하게 되면 접두사가 같은 것끼리 뭉치게 된다.

이렇게 되면 n*n이 아니라 n번의 비교로 끝낼 수 있다.

 

"정렬"을 잘 활용하자

 

import sys


def solve(n, arr):
    for i in range(n - 1):
        l = min(len(arr[i - 1]), len(arr[i]))
        for j in range(l):
            if arr[i - 1][j] != arr[i][j]:
                break
        else:
            return "NO"
    return "YES"


t = int(sys.stdin.readline())
for _ in range(t):
    n = int(sys.stdin.readline())
    arr = [sys.stdin.readline().strip() for _ in range(n)]
    arr.sort()
    print(solve(n, arr))

 

 

'알고리즘' 카테고리의 다른 글

백준 12886 돌그룹 파이썬  (0) 2023.08.11
백준 1577 도로의 개수 파이썬  (0) 2023.08.11
백준 2157 여행 파이썬 dp풀이  (0) 2023.08.10
백준 2098 외판원 순회  (0) 2023.08.02
[백준] 1039 교환 파이썬  (0) 2023.07.11

댓글