감자튀김 공장🍟

[프로그래머스/Lv.2] 전화번호 목록 (with 파이썬) 본문

Algorithm/Programmers

[프로그래머스/Lv.2] 전화번호 목록 (with 파이썬)

Potato potage 2023. 2. 22. 11:44
반응형

✔ 문제

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

  • 구조대 : 119
  • 박준영 : 97 674 223
  • 지영석 : 11 9552 4421

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

 

 

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

 

프로그래머스

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

programmers.co.kr


풀이

🥐 오답 코드

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

 

 

🥐 오답 코드 2

def solution(phone_book):
    check = phone_book[0]
    for i in range(1, len(phone_book)):
        if phone_book[i].startswith(check): # 문자열이 특정 값으로 시작하는지
            return False
    return True

1번 코드는 in 을 사용해서 해당 값이 phone_book[i] 내부에 들어있기만 하면 되는 조건이다.

만약 check는 123인데 phone_book[i]이 34512357인 경우에 False가 리턴될 수 있다.

따라서 startswtich()를 사용해 phone_book[i]이 check로 시작되는지 확인할 수 있도록 했다.

 

 

🐳 정답 코드

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

 


설명

문제를 잘 읽어봐야 한다. 예시에 있는 가장 맨 처음 문자열이 접두어가 되는 것이 아니라 총 전화번호 중, 다른 번호의 접두어인 경우가 있는지 확인해야한다.

따라서 전화번호부를 정렬한 후 [i]와 [i+1]을 비교하면 된다.

 


 후기

배열 가장 맨 처음 문자열이 접두어가 되는 줄 알고 그걸 기준으로 풀고 있었는데 다른 사람들과 틀린 예제가 너무 달라서 뭐가 문제일까 생각해봤더니 문제를 잘못읽고 풀고 있었다.

반응형
Comments