[프로그래머스 python] 해시 - 전화번호 목록

프로그래머스 해시 전화번호 목록 풀이
https://programmers.co.kr/learn/courses/30/lessons/42577

문제는 해당 링크 들어가면 확인 가능

효율성 문제를 해결하려면 이중 for문을 사용하지 않고 풀어야했기때문에
for문 한개로 풀 수 있는 방법을 생각했다.

phone_book의 number들을 값 순서로 정렬하고 -> 길이 순으로 정렬했다.
간단하게 sorted(), 혹은 sort() 함수를 쓰면 오름차순, 길이순으로 정렬된다.
그리고 phone_number[i] 와 phone_number[i + 1]를 비교하면된다.

ex. 입출력 예제에서
1번 ["119", "97674223", "1195524421"] 을 정렬하면 ["119", "1195524421", "97674223"] 이 된다.

풀이

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

📌 주의사항 처음에 if num[i] in num[i + 1] 로 확인했는데
테케 한개가 통과되지 않아서 고민했는데,,
생각해보니 in은 전체를 비교대상으로 삼기 때문에, in을 사용하지 않고 접두사만 확인할 수 있는 방법을 사용해야한다.
num[i]만큼 num[i+1]에서 문자열 슬라이싱으로 확인해주면 된다.

다른 사람의 풀이 보고 띵 ~ 머리맞음

def solution(phoneBook):
    phoneBook = sorted(phoneBook)

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

zip함수를 이용, startwith이라는 메소드를 사용했다. 기억해야지

좋은 웹페이지 즐겨찾기