https://school.programmers.co.kr/learn/courses/30/lessons/42577
내가 짠 코드 😥
def solution(phone_book):
answer = True
sorted(phone_book)
for i in range(len(phone_book)):
for j in range(1, len(phone_book)):
if len(phone_book[i]) < len(phone_book[j]):
if phone_book[i] in phone_book[j][:len(phone_book[i])] :
answer = False
return answer
이중for문 부터 조건문이 많이 나와 코드가 기본적으로 지저분해 보인다.. 그리고 효율성 테스트도 시간초과로 실패한다..
전화번호 길이를 비교하며 이전 전화번호의 길이가 짧을 때 처음부터 이전 전화번호의 길이만큼에서 존재하면 answer를 False로 변경해주었다.
* startswith 함수 *
String1.startswith(String2) : String1이 String2로 시작되는지 찾아주는 기본 함수
* zip 함수 *
함수 안의 각 리스트, 튜플, 문자열에 대해 각 요소를 짝지어 주는 함수
반환 값이 list가 아니기 때문에 for문에 사용할 때는 list처리를 해주어야한다!
def solution(phone_book):
phone_book.sort()
for p1, p2 in zip(phone_book, phone_book[1:]):
if p2.startswith(p1):
return False
return True
두 개의 함수를 다 사용하면 깔끔하게 해결 가능하다!! 세상에 멋진 사람들이 너무 많다 😂
'Algorithm > Problems' 카테고리의 다른 글
[백준/파이썬] 2738번 행렬 덧셈 (0) | 2022.11.07 |
---|---|
[프로그래머스] 위장 파이썬 (0) | 2022.11.02 |
[프로그래머스] 폰켓몬 python (0) | 2022.10.26 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.10.26 |
[프로그래머스] K번째 수 (0) | 2022.08.21 |