[Java Algorithm] 프로그래머스 Lv.2 _ 전화번호 목록

2025. 7. 28. 18:23·Algorithm Study

[문제]

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

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

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

[제한 사항]

- phone_book의 길이는 1 이상 1,000,000 이하입니다.
- 각 전화번호의 길이는 1 이상 20 이하입니다.
- 같은 전화번호가 중복해서 들어있지 않습니다.

 

[Algorithm]

1. HashSet에 모든 번호 저장

2. 각 전화번호에 대해 가능한 모든 접두어를 생성

3. 생성된 접두어가 HashSet에 존재하는지 확인

 

[Code]

import java.util.HashSet;

public boolean solution(String[] phone_book) {
    // 모든 전화번호를 HashSet에 저장
    HashSet<String> hs = new HashSet<>();
    for (String p : phone_book) {
        hs.add(phone);
    }
    
    // 각 번호의 모든 접두어 확인
    for (String p : phone_book) {
        // 길이 1부터 (전체길이-1)까지의 접두어 생성
        for (int i = 1; i < p.length(); i++) {
            String prefix = p.substring(0, i);
            
            // 생성된 접두어가 실제 전화번호인지 확인
            if (hs.contains(prefix)) {
                return false;
            }
        }
    }
    
    return true;
}

 

 

[+ 다른 사람 풀이]

class Solution {
    public boolean solution(String[] phoneBook) {
       for(int i=0; i<phoneBook.length-1; i++) {
            for(int j=i+1; j<phoneBook.length; j++) {
                if(phoneBook[i].startsWith(phoneBook[j])) {return false;}
                if(phoneBook[j].startsWith(phoneBook[i])) {return false;}
            }
        }
        return true;
    }
}

 

브루트 포스(완전 탐색) 방식으로 이중 반복문을 사용한 방식 

이 풀이는 문제가 수정되면서 효율성 검사 통과를 못한다고 한다 ..

해시를 활용한 코드에 비해 비교를 1번 더 수행하기 때문에 효율성이 떨어짐

→ 번호가 많아질수록 부르트 포스는 더 비효율적이 됨!

하지만 startsWith() 라는 메서드를 알게되었다는 점에 의미가 있음ㅋ

 

[+ Plus]

더보기
더보기

💡String 클래스의 startsWith()/endsWith() 메서드

- boolean startsWith(String prefix)

→ 문자열이 지정된 접두어(prefix)로 시작하는지 확인 후 true, false 반환

 

- boolean endsWith(String suffix)

→ 문자열이 지정된 접미어(suffix)로 끝나는지 확인 후 true, false로 반환

 

저작자표시 변경금지 (새창열림)

'Algorithm Study' 카테고리의 다른 글

[Java Algorithm] 프로그래머스 Lv.3 _ 베스트앨범  (1) 2025.07.28
[Java Algorithm] 프로그래머스 Lv.2 _ 의상  (3) 2025.07.28
[Java Algorithm] 프로그래머스 Lv.0 _ 주사위 게임 3  (2) 2025.03.13
[Java Algorithm] 프로그래머스 Lv.0 _ 간단한 논리 연산  (1) 2025.03.05
[Java Algorithm] 프로그래머스 Lv.0 _ 배열 만들기 4  (0) 2025.02.25
'Algorithm Study' 카테고리의 다른 글
  • [Java Algorithm] 프로그래머스 Lv.3 _ 베스트앨범
  • [Java Algorithm] 프로그래머스 Lv.2 _ 의상
  • [Java Algorithm] 프로그래머스 Lv.0 _ 주사위 게임 3
  • [Java Algorithm] 프로그래머스 Lv.0 _ 간단한 논리 연산
microsaurs
microsaurs
개발 스터디로그입니다. 공부한 내용을 정리해서 올립니다 ㅇ-ㅇ
  • microsaurs
    microsaurs.devlog
    microsaurs
  • 전체
    오늘
    어제
    • 분류 전체보기 (157)
      • Side Project (4)
      • Algorithm Study (53)
      • JAVA (8)
      • Swift (11)
      • Python (21)
      • CS (5)
      • React (3)
      • 리얼클래스 studylog (27)
      • 정보처리기사[실기] (23)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    프로그래밍언어
    알고리즘
    ios프로그래밍을위한스위프트기초
    정처기실기
    정보처리기사프로그래밍언어
    정보처리기사실기
    ios프로그래밍
    타일러영어
    스위프트기초
    자바알고리즘
    파이썬문법
    Algorithm
    Python
    영어독학
    javaStudy
    영어회화
    파이썬기초
    파이썬
    나도코딩
    ios개발
    The Office
    SWIFT
    javaalgorithm
    더오피스
    Java
    study
    리얼클래스
    정보처리기사
    리얼학습일기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
microsaurs
[Java Algorithm] 프로그래머스 Lv.2 _ 전화번호 목록
상단으로

티스토리툴바