본문 바로가기

Algorithm/코딩테스트 고득점 Kit

[고득점 Kit / 해시] 전화번호 목록 (find, startswith, endswith)

 

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

 

프로그래머스

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

programmers.co.kr

 

처음에는 이렇게 풀었다.

 

1. 리스트 문자열을 정렬 (아래와 같이)

 ["12","888","567","1235","123"] -> ['12', '123', '1235', '567', '888']

 

2. 인접한 문자열끼리 비교하여 앞 문자열이 뒷 문자열에 포함되어있는가를 확인

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

 

하지만 위와 같이 풀면 단 하나의 테스트케이스를 통과하지 못해 오답이 뜬다.. ㅠ

 

 

사실 아직도 뭐가 반례 케이스인지 모르겠다.

하지만.. 내가 쓴 코드는 결국 앞 문자열이 뒷 문자열에 포함되어있는가를 확인한 것 뿐이지, 접두사로 포함되어 있는지 확인한 것이 아니다.

 

검색을 좀 해보니 'startswith'라는 메소드가 있었다. 이는 문자열이 특정 접두어로 시작하는지 확인하는 메서드다.

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

 

이를 이용하여 문제를 푸니 정답처리!

 

다른 사람의 풀이를 봐도 내 풀이가 가장 맘에 든다.