본문 바로가기
(Python)파이썬/(Python)파이썬 문법

코딩테스트 준비 - 프로그래머스: 전화번호 목록 풀이 (파이썬)

by 공부가싫다가도좋아 2021. 7. 1.
반응형

프로그래머스: 전화번호 목록 풀이


문제풀러가기

https://programmers.co.kr/learn/courses/30/lessons/42577?language=python3 

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조

programmers.co.kr


문제 분석

1. 비슷한 숫자끼리 모아두기 위해, 문자열을 정렬해줍니다. (sort 사용)

2. 정렬된 문자를 두 개씩 차례대로 확인합니다.

더보기

예 ) ["10", "111", "112", "1234", "12344", "123456"] 가 있으면,

10과 11비교, 111과 112 비교, 112와 1234비교, 1234와 12344비교....


코드: 시간초과 실패

def solution(phone_book):
    rs=sorted(phone_book,key=lambda x:len(x))
    for j in range(len(rs)-1):
        result = rs[j]
        for i in range(j+1,len(rs)):
            if result==(rs[i])[:len(result)]:
                return False
    return True

* 처음에는 길이가 짧은 순으로 정렬을 한 후, 이중 for문을 사용하여 하나씩 비교하는 형식으로 코드를 짰습니다.

*결과는 마지막 두개의 효율성 테스트에서 시간초과가 떳습니다.


코드: 성공

def solution(phone_book):
    phone_book.sort()
    for i in range(len(phone_book)-1):
        if phone_book[i]==(phone_book[i+1])[:len(phone_book[i])]:
            return False
    return True

*길이 순으로말고, 비슷한 문자열대로 정렬을 하면, 이중 for문을 사용할 필요없이,

*한 개의 for 문으로 둘 둘씩 차례대로 비교하면 됩니다.


코드: 성공 - 다른 사람

def solution(phone_book):
    phone_book.sort()
    for i,j in zip(phone_book,phone_book[1:]):
        if j.startswith(i):
            return False
    return True

 *startswith를 사용한 코드입니다. 

 *startswith는  str1.startswith(str2) 형식으로 쓰입니다. 

- str1에서 str2로 시작할 경우 True 반환, 그렇지 않다면 False반환.


startswith/endswith에 대해 간단한 설명 보시고 싶으시면 아래 링크를 참고해주세요.

2021.07.01 - [(Python)파이썬/(Python)파이썬 문법] - (파이썬) 문자열 처음/끝부분 같은지 확인 : startswith와 endswith사용법 + 예제

 

(파이썬) 문자열 처음/끝부분 같은지 확인 : startswith와 endswith사용법 + 예제

startswith와 endswith사용법 사용법 str1.startswith(str2): str1의 앞부분이 str2와 같으면 True를 반환, 그렇지 않으면 False 반환 str1.endswith(str2): str1의 끝 부분이 str2와 같으면 True를 반환, 그렇지..

eunhee-programming.tistory.com

 

반응형

댓글