반응형
Notice
Recent Posts
Recent Comments
Link
동캄의 코딩도장
프로그래머스 level2 [전화번호 목록] 파이썬 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/42577?language=python3
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
시도1: 실패 (시간초과 풀이)
#프로그래머스 전화번호 목록
def solution(phone_book):
phone_book.sort()
for i in range(len(phone_book)):
for j in range(i+1,len(phone_book)):
leng=len(phone_book[i])
if leng<len(phone_book[j]) and phone_book[i][0]==phone_book[j][0] and phone_book[i]==phone_book[j][:leng]:
return False
return True
맨처음에는 이중 for문을 사용하여 버블소트 처럼 모든 항목을 하나씩 검사하려고했었다. 시간초과가 발생하였다.
생각해보니 어짜피 sort()하면, 문자열 기준으로 정렬되기때문에 굳이 이중 for문을 쓸 필요가 없다는 것을 깨달았다.
시도2: 성공
#프로그래머스 전화번호 목록
def solution(phone_book):
phone_book.sort()
for i in range(len(phone_book)-1):
leng1=len(phone_book[i])
leng2=len(phone_book[i+1])
if leng1<leng2 and phone_book[i]==phone_book[i+1][:leng1]:
return False
return True
O(N)의 시간복잡도로 해결하였다.
다른 사람의 풀이
def solution(phoneBook):
phoneBook = sorted(phoneBook)
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
p1은 0번째 index부터, p2는 1번째 index부터 시작해서 startswith이라는 함수를 이용하여 판단한다.
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
프로그래머스 level2 [방금그곡] 파이썬 (0) | 2021.12.18 |
---|---|
프로그래머스 level2 [튜플] 파이썬 (0) | 2021.12.17 |
프로그래머스 level2 [더 맵게] 파이썬 (0) | 2021.12.11 |
프로그래머스 level2 [오픈채팅방] 파이썬 (0) | 2021.12.10 |
프로그래머스 level2 [위장] 파이썬 (0) | 2021.12.10 |