문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42577
문제
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
- 구조대 : 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입니다.
문제 풀이
def solution(phoneBook):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
접두사를 검사하는 방법을 잘 모르겠어서 결국 찾아봤는데
startswith라는 유용한 내장함수가 있었다.
정렬을 한 뒤에 phoneBook을 검사하면, 바로 다음 문자열을 검사하면 되기 때문에
효율성이 극대화된다.
boolean startswith(String prefix)
접두사를 매개변수로 넣어주었을 때,
문자열이 해당 접두사로 시작할 경우 True를 반환, 아닐 경우 False를 반환한다.
'공백'도 취급하기 때문에 주의해야 한다.
반대로 접미사를 취급하는 endswith 함수도 존재한다.
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 베스트앨범 (Level 3) (파이썬 python) (0) | 2022.02.15 |
---|---|
[프로그래머스] 위장 (Level 2) (파이썬 python) (0) | 2022.02.14 |
[프로그래머스] 완주하지 못한 선수 (Level 1) (파이썬 python) (0) | 2022.02.14 |
[프로그래머스] K번째수 (Level 1) (파이썬 python) (0) | 2022.02.12 |
[프로그래머스] 다리를 지나는 트럭 (Level 2) (파이썬 python) (0) | 2022.02.11 |