본문 바로가기

알고리즘/프로그래머스

[Python] 전화번호 목록

https://school.programmers.co.kr/learn/courses/30/lessons/42577

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  • 첫 번째 풀이 (효율성 3, 4에서만 시간초과)
import re
def solution(phone_book):
    phone_book = sorted(phone_book, key=lambda x : len(x))    
    
    for i in range(len(phone_book)-1):
        
        pattern = re.compile({phone_book[i]})
        
        for j in range(i+1, len(phone_book)):
            if pattern.match(phone_book[j]):
                return False
    return True

두 개의 for문을 돌면서 전부 찾다보니까 시간이 너무 오래걸리는 것 같음

 

  • 다른 풀이
def solution(phoneBook):
    phoneBook = sorted(phoneBook)

    for p1, p2 in zip(phoneBook, phoneBook[1:]):
        if p2.startswith(p1):
            return False
    return True

zip과 startswith를 이용해서 두개를 동시에 확인하면서 진행하니까 통과함

 

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Python] 야근 지수  (0) 2023.01.05
[Python] 크기가 작은 부분 문자열  (0) 2023.01.04
[Python] 실패율  (0) 2022.12.31
[Python] 콜라 문제  (0) 2022.12.30
[Python] 소수 만들기  (0) 2022.12.29