이숭간 공부기록
백준 5052번 파이썬 _ 전화번호 목록 본문
728x90
문제유형 : 문자열, 정렬, 해시
문제핵심 :
1. 파이썬 라이브러리 startswith메소드
2. 전화번호 배열을 정렬하면 접두어가 있는경우 같은번호로 시작하는 번호들은 무조건 인접하게 위치한다!!
3. zip()함수 : 파이썬 내장함수인 zip()은 동일한 개수로 이루어진 자료형을 묶어주는 역할을 하는 함수다.
(동일한개수 아니여도 됨 _ 더작은 개수에 맞춰서 짝짓기됨,
즉 길이다른 김밥두줄을 생각하고 시작부분은 동일하게 맞춘뒤 꽁다리는 버리고 슬라이스한다고 생각)
- zip()함수 사용 예시
# zip()함수로 리스트 만들기
Number = [1,2,3,4]
Name = ['hong','gil','dong','nice']
Number_Name = list(zip(Number,name))
print(Number_Name)
'''
결과 : [(1 ,'hong'), (2 ,'gil'), (3 ,'dong'), (4 ,'nice')]
'''
# zip()함수로 딕셔너리 만들기
Number = [1,2,3,4]
Name = ['hong','gil','dong','nim']
dic = {}
for number , name in zip(Number,Name):
dic[number] = name
print(dic)
'''
결과 : {1 : 'hong' , 2 : 'gil' , 3 : 'dong' , 4 : 'nim'}
'''
정답 코드:
import sys
input = sys.stdin.readline
def solution(phone_Book):
sorted_phone = sorted(phone_Book) # 전화번호 배열을 정렬하고
for p1, p2 in zip(sorted_phone, sorted_phone[1:]): # zip()을 이용해 인접한 두 원소를 비교
if p2.startswith(p1): # 접두어가 있으면 (접두어가 되는것이 접두어로 시작하는 수의 항상 앞에 위치하므로)
return 'NO'
return 'YES' #접두어 없으면
t = int(input())
for i in range(t):
n = int(input())
phone_book = list(input().strip() for _ in range(n))
print(solution(phone_book))
'알고리즘 > 백준' 카테고리의 다른 글
백준 1259번 파이썬 _ 팰린드롬수 (0) | 2021.02.13 |
---|---|
백준 1181번 파이썬 _ 단어 정렬 (0) | 2021.02.13 |
백준 10951 파이썬 _ A+B = 4 (테스트입력개수 모를때) (0) | 2021.02.12 |
백준 1966 파이썬 _ 프린터 큐 (0) | 2021.02.12 |
백준 12865 파이썬 _ 배낭 (0) | 2021.02.12 |