프로그래머스 전화번호 목록 (Python)

2022. 4. 17. 17:21·알고리즘/프로그래머스

풀이 참조: https://youtu.be/4-iyppqNCyg

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

 

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

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

programmers.co.kr

위 유튜브 영상을 보고 정리하였습니다. 개발자로 취직하기 님께 감사드립니다. 

 

Solution 1

 

이중포문을 쓰고 if 문 2개로 서로 접두어인지 확인한다. 

테스트케이스 2개가 시간초과가 뜬다. 

# Loop를 활용한 솔루션 : 시간초과 뜸.
def solution_Loop(phone_book):
    # 1. 비교할 A 선택
    for i in range(len(phone_book)):
    # 2. 비교할 B 선택
       for j in range(i+1, len(phone_book)):
    # 3. 서로가 서로의 접두어인지 확인한다.
           if phone_book[i].startswith(phone_book[j]):
               return False
           if phone_book[j].startswith(phone_book[i]):
               return False

    return True

 

Solution 2

 

정렬을 하고 zip을 활용해서 배열의 2번째부터 시작하는 배열과 원래 배열을 묶어서, 비교하여 for문을 한 개로 줄인다.

시간초과없이 잘 통과한다.  

# Sorting / Loop를 활용한 solution
def solution_sorting(phone_book):
    # 1. 전화번호 sorting 한다
    phone_book.sort()
    
    # 2. sorting한 전화번호를 2개씩 확인해서 접두어인지 본다.
    for p1, p2 in zip(phone_book, phone_book[1:]):
        if p2.startswith(p1):
            return False

    return True

Solution 3

해쉬를 활용한 풀이

각 숫자를 키로  해시맵을 만들어 놓고 그 해당 키로 검색을 하는 방법이다.

 

jubdoo 라는 변수에 숫자를 하나씩 붙이면서 해시맵에 해당하는 접두 숫자가 있는지 확인한다. (if jubdoo in hash_map)

jubdoo가 지금 붙여지는 숫자가 아닌 다른 숫자와 일치하는지 동시에 파악한다. (and jubdoo != phone_number)

def solution(phone_book):
    # 1. Hash map 을 만든다.
    hash_map = {}
    for number in phone_book:
        hash_map[number] = 1

    print(hash_map)
    # 2. 접두어가 Hash map 에 존재하는지 찾는다.
    for phone_number in phone_book:
        jubdoo = ''
        for number in phone_number:
            jubdoo += number
            # 3. 접두어를 찾아야 한다. (기존 번호와 같은 경우는 제외한다)
            if jubdoo in hash_map and jubdoo != phone_number:
                return False

    return True

'알고리즘 > 프로그래머스' 카테고리의 다른 글

프로그래머스 n의 배수 고르기  (0) 2022.12.10
프로그래머스 A로 B만들기  (0) 2022.12.10
프로그래머스 369게임  (0) 2022.12.10
프로그래머스 7의 개수  (0) 2022.12.10
프로그래머스 2차원으로 만들기  (0) 2022.12.10
'알고리즘/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 A로 B만들기
  • 프로그래머스 369게임
  • 프로그래머스 7의 개수
  • 프로그래머스 2차원으로 만들기
고구마와 감자
고구마와 감자
Amor DevFati는 김연자-Amor Fati에 Development(개발)의 Dev 를 첨가하여 만든 이름
  • 고구마와 감자
    Amor DevFati(아모르 개발파티)
    고구마와 감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (156)
      • Loopers 2기 (4)
      • 스프링 (5)
      • 알고리즘 (113)
        • 백준 (70)
        • 프로그래머스 (7)
        • 인프런_자바코테강의 (20)
        • 리트코드 (5)
        • 해커랭크 (0)
        • 코드업 (3)
        • 이것저것 (7)
      • 자바 (7)
      • GIT (0)
      • 파이썬 (1)
      • 개발이론 (4)
      • JPA (0)
      • 김영한 강의 (13)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (2)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (6)
        • 스프링 핵심 원리 - 기본편 (5)
      • 일기 및 아무말 적기 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    1247
    할로윈의 사탕
    남욱이의 닭장
    꼬리를 무는 숫자 나열
    2의 제곱인가
    Mini Fantasy War
    11966
    16673
    더하기 3
    14656
    10178
    조교는 새디스트야!!
    4458
    스프링 핵심 원리
    11023
    2921
    1598
    전투 드로이드 가격
    5988
    2857
    백준
    등장하지 않는 문자의 합
    3059
    고려대학교에는 공식 와인이 있다
    5361
    첫 글자를 대문자로
    카이사르 암호
    10409
    그대로출력하기2
    홀수일까 짝수일까
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고구마와 감자
프로그래머스 전화번호 목록 (Python)
상단으로

티스토리툴바