-
[백준 / Python] 5052번 전화번호 목록 | 초코더알고리즘/백준 2020. 1. 14. 00:14
https://www.acmicpc.net/problem/5052
5052번: 전화번호 목록
문제 전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오. 전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없어야 한다. 예를 들어, 전화번호 목록이 아래와 같은 경우를 생각해보자 긴급전화: 911 상근: 97 625 999 선영: 91 12 54 26 이 경우에 선영이에게 전화를 걸 수 있는 방법이 없다. 전화기를 들고 선영이 번호의 처음 세 자리를 누르는 순간 바로 긴급전화가
www.acmicpc.net
접근법
numbers배열에 전화번호 목록을 입력받아옵니다. 그리고 정렬시킵니다.
문자열을 정렬시키면 ['911', '97625999', '91125426'] 이런식으로 사전순으로 정렬되므로 비교해줄때 i번째와 i+1번째만 비교(붙어있는 문자열끼리만 비교해도 접두어가 겹치는지 알수있음)합니다.
저는 numbers를 입력받을때 input()함수를 썼는데 시간초과가 떠서 이제 sys.stdin.readline()함수를 사용해서 한줄씩 입력받아오는 것을 습관들이겠습니다.
numbers.append(sys.stdin.readline().strip())을 하고 numbers를 출력해보면 ['911\n', '97625999\n', '91125426\n']입니다. 개행문자를 제거해주기위해 strip()함수를 사용하였습니다.
나의 풀이
import sys def solution(numbers): numbers.sort() #numbers 정렬시키면 사전순으로 정렬 for i in range(len(numbers)-1): #정렬되어있으므로 i번째와 i+1번째만 비교해보면됌 if numbers[i] in numbers[i+1]: return False return True numbers=[] t=int(input()) answer=[] for i in range(t): n=int(input()) for _ in range(n): numbers.append(sys.stdin.readline().strip()) answer.append(solution(numbers)) numbers.clear() for yn in answer: if yn == False: print('NO') else: print('YES')
'알고리즘 > 백준' 카테고리의 다른 글
[백준 / Python] 2399번 거리의 합 | 초코더 (1) 2020.01.15 [백준 / Python] 2959번 거북이 | 초코더 (0) 2020.01.14 [백준 / Python] 3047번 ABC | 초코더 (0) 2020.01.13 [백준 / Python] 10825번 국영수 | 초코더 (0) 2020.01.13 [백준 / Python] 11004번 K번째 수 | 초코더 (0) 2020.01.13