728x90
https://programmers.co.kr/learn/courses/30/lessons/42577#
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
처음 코드
def solution(phone_book):
answer = True
for i in range(len(phone_book)):
for j in range(len(phone_book)):
if i == j:
continue
else:
len_ = len(phone_book[i])
if phone_book[i] in phone_book[j][0:len_]:
return False
return answer
정답은 맞았지만, 효율성 마지막 2문제 실패.
이중 for 문이라 시간이 오래 걸리고, 자기 자신을 제외한 모든 문자열끼리 비교한다.
두 번째 코드
def solution(phone_book):
answer = True
phone_book.sort()
for i in range(len(phone_book)-1):
len_ = len(phone_book[i])
if phone_book[i] in phone_book[i+1][0:len_]:
return False
return answer
※ 문자열 sort의 특징을 이용하자!
즉, 만약 접두어가 존재한다면, 해당 문자와 바로 뒷 순서의 문자와 비교하면 되기 때문에 for문 하나로 해결 가능하다.
또 하나의 접두어만 존재해도 바로 false가 되기 때문에 바로 return 해주면 된다.
'Python > CoTe' 카테고리의 다른 글
[programmers] 방문길이 (0) | 2022.03.09 |
---|---|
[programmers] 게임 맵 최단거리 (0) | 2022.03.09 |
[programmers] 기능 개발 (0) | 2022.03.04 |
[programmers] 1차 다트 게임 (0) | 2022.03.03 |
[programmers] 키패드 누르기 (0) | 2022.03.03 |