문제 설명 / 제한 사항 / 입출력 예제 / 입출력 예 설명
더보기
- 전화번호 목록
문제 설명
입출력 예 설명
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
- 구조대 : 119
- 박준영 : 97 674 223
- 지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
제한 사항- phone_book의 길이는 1 이상 1,000,000 이하입니다.
- 각 전화번호의 길이는 1 이상 20 이하입니다.
- 같은 전화번호가 중복해서 들어있지 않습니다.
phone_book | return |
["119", "97674223", "1195524421"] | false |
["123","456","789"] | true |
["12","123","1235","567","88"] | false |
입출력 예 #1
앞에서 설명한 예와 같습니다.
입출력 예 #2
한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.
입출력 예 #3
첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.
알림
2021년 3월 4일, 테스트 케이스가 변경되었습니다. 이로 인해 이전에 통과하던 코드가 더 이상 통과하지 않을 수 있습니다.
다른 사람 풀이 (1) : 슬라이싱 사용
def solution(ph):
if len(ph) == 1:
return True
ph.sort(key=lambda x : x)
for i in range(len(ph)-1):
if ph[i] in ph[i+1][:len(ph[i])]:
return False
return True
다른 사람 풀이 (2) : zip(), startswith() 사용
def solution(phoneBook):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
- zip(iterables, strict=False) (https://docs.python.org/3/library/functions.html?highlight=zip#zip)
- 여러 개의 각 iterable에서 하나의 item을 가져와 튜플을 생성한다
- 길이가 다른 iterable들이 주어질 경우, 짧은 iterable이 소진되면 튜플 생성을 멈춘다.
- strict 옵션
- 기본 False
- iterable들의 길이가 다를 경우 짧은 iterable을 기준으로 튜플 생성 후 중단
- True
- iterable의 길이가 같아야 하는 경우 사용
- iterable의 길이가 다른 경우 ValueError 일으킨다
- 기본 False
- itertools.zip_longest(*iterables, fillvalue=None) (https://docs.python.org/3/library/itertools.html#itertools.zip_longest)
- 길이가 짧은 iterable은 길이가 긴 iterable과 동일한 길이가 되도록 같은 값의 요소 (fillvalue)를 추가로 덧댈 수 있다
- 길이가 긴 iterable이 잠재적으로 무한한 경우, islice()나 takewhile()과 같이 call의 횟수를 제한하여야 한다.
- startswith(prefix[, start [, end]])
- prefix로 시작하는 경우 True를, 아닌 경우 False를 반환한다.
- prefix는 prefix의 tuple일 수도 있다
- end를 옵션으로 명시할 경우, 해당 위치에서 비교를 멈춘다
다른 사람 풀이 (3) : 해시 사용
def solution(phone_book):
answer = True
hash_map = {}
for phone_number in phone_book:
hash_map[phone_number] = 1
for phone_number in phone_book:
temp = ""
for number in phone_number:
temp += number
if temp in hash_map and temp != phone_number:
answer = False
return answer
'Daily Coding Test > Python' 카테고리의 다른 글
[230302] 프로그래머스 Python Level 2. k진수에서 소수 개수 구하기 (0) | 2023.03.02 |
---|---|
[230301] 프로그래머스 Python Level 2. 타겟 넘버 (0) | 2023.03.01 |
[230227] 프로그래머스 Python Level2. [1차] 뉴스 클러스터링 (0) | 2023.02.27 |
[230224] 프로그래머스 Python Level 2. 연속 부분 수열 합의 개수 (0) | 2023.02.24 |
[230223] 프로그래머스 Python Level 2. 프린터 (1) | 2023.02.23 |