[Python] 백준 / gold / 5052 : 전화번호 목록

김상우·2021년 11월 24일
0

문제 링크 : https://www.acmicpc.net/problem/5052

문자열 문제. 문자열을 갖는 리스트 ['123', '1234', '1231'] 을 정렬하면 ['123', '1231', '1234'] 가 된다는 것을 까먹지 말아야겠다.

프로그래머스에 이거랑 거의 똑같은 문제가 있었는데, 그 문제는 한 6개월 전? 쯤 풀었었다. 그때 거의 3시간 정도 걸렸던 거 같다. 시간복잡도 고려 때문인데, 그때는 내가 문제를 어렵게 보는 습관이 진짜 심했을 때다.

프로그래머스 : https://programmers.co.kr/learn/courses/30/lessons/42577

시간복잡도 때문에 해쉬 탐색이건, 힙 생성이건 어렵게 생각할 필요가 없고, 전화번호 문자열을 리스트에 담고 쭉 정렬한다.

일관성이 깨지려면 어차피 인덱스가 1차이나는 곳에서 발생한다. 이 생각을 할 수만 있으면 쉽게 풀 수 있는 문제인 것 같다.

문제를 너무 어렵게 생각하지 말고 쉽게 생각하는게 중요한 것 같다..


파이썬 코드

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


def program():
    N = int(sys.stdin.readline())
    phoneNumber = []
    for _ in range(N):
        number = sys.stdin.readline().strip()
        phoneNumber.append(number)

    answer = 'YES'
    phoneNumber.sort()
    for i in range(1, N):
        if phoneNumber[i][:len(phoneNumber[i-1])] == phoneNumber[i-1]:
            answer = 'NO'
            break

    print(answer)


for _ in range(T):
    program()

profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.

0개의 댓글