본문 바로가기

코딩테스트/Python

[프로그래머스] 전화번호 목록

전화번호 목록 - https://programmers.co.kr/learn/courses/30/lessons/42577#

 

1) 실패

def solution(phone_book):
    
    answer = True
    
    for i in range(1,len(phone_book)):
        
        if phone_book[i][0:len(phone_book[0])] == phone_book[0]:
            answer = False
            return answer
        
    return answer

채점 결과

정확성: 62.5

효율성: 4.2

합계: 66.7 / 100.0

 

ㅠㅠ 왜 틀린지 모르겠다..... 계속 해봐야겠다... => 문제 잘못이해

 

2) 실패

def solution(phone_book):
    
    answer = True
    
    for i in range(1,len(phone_book)):
        if phone_book[0] in phone_book[i]:
            return False
            
    return True

채점 결과

정확성: 50.0

효율성: 4.2

합계: 54.2 / 100.0

 

더 처참해졌다.. 어이없어..  => 문제 잘못이해

 

3) 실패

def solution(phone_book):
    
    answer = True
    
    for i in phone_book:
        for j in phone_book:
                if i in j:
                    if i!=j:
                        return False
        
    return True

채점 결과

정확성: 66.7

효율성: 8.3

합계: 75.0 / 100.0

 

문제를 잘못 읽었었다!!! 무조건 첫번째 문자열만 접두어여야만 하는줄..  점수 올랐네 ㅎ 더해봐야겠다

실패이유 => in을 쓰면 접두어가 아니라 중간에 문자열이 포함되어도 False반환!!!

 

....) 성공!!

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

먼저 sort로 정렬해주고 그 다음 문자와 비교해준다!!