[프로그래머스 알고리즘 고득점 Kit][해시][Java] 전화번호 목록

2026. 2. 20. 23:55·알고리즘 & 자료구조/해시

https://school.programmers.co.kr/learn/courses/30/lessons/42577?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

1. 틀린 코드

문자열을 사전순으로 정렬하면 접두사는 바로 옆에 있게됨

그러면 바로 옆만 비교하면서 접두사인지 아닌지 체크하고 있으면 바로 false 

return 안되고 반복문 탈출하면 true

뭐가 틀렸을까...?

아 바본가..

        Arrays.sort(phone_book, (s1, s2) -> {
            return s1.length() - s2.length();
        });

처음엔 문자열 길이가 짧은 거를 긴거랑 다 비교하면 되지 않을까 생각하고 위처럼 정렬했다.
번호의 수가 100만개인데 O(N^2) 의 시간복잡도라 다른 방법을 고민해야했다.
그렇게 사전순 배열을 떠올리고 코드를 썼지만 첫글자만 비교 정렬해버렸다.

 

아래처럼 정렬하면 문자열 전체 사전순이 아니라 맨 첫글자만 사전순이 된다...

import java.io.*;
import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        int phone_book_len = phone_book.length;
        Arrays.sort(phone_book, (s1, s2) -> {
            return s1.charAt(0) - s2.charAt(0);
        });
        for(int i=0; i<phone_book_len-1; i++){
            if(phone_book[i+1].startsWith(phone_book[i])) {
                return false;
            }
        }
        return true;
    }
}

 

2. 정답 코드

 

내가 의도한 사전순 정렬로 바꾸고 정답.

import java.io.*;
import java.util.*;

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

문자열 배열 사전순 정렬

Arrays.sort(phone_book);
사전순 반대

Arrays.sort(phone_book,Collections.reverseOrder());

Arrays.sort(phone_book, (s1, s2) -> {

return s2.compareTo(s2);

};

'알고리즘 & 자료구조 > 해시' 카테고리의 다른 글

[프로그래머스 알고리즘 고득점 Kit][해시][Java] 베스트앨범  (0) 2026.03.02
[프로그래머스 알고리즘 고득점 Kit][해시][Java] 의상  (0) 2026.02.22
[프로그래머스 알고리즘 고득점 Kit][해시][Java] 포켓몬  (0) 2026.02.17
[프로그래머스 알고리즘 고득점 Kit][해시][Java] 완주하지 못한 선수  (0) 2026.02.15
'알고리즘 & 자료구조/해시' 카테고리의 다른 글
  • [프로그래머스 알고리즘 고득점 Kit][해시][Java] 베스트앨범
  • [프로그래머스 알고리즘 고득점 Kit][해시][Java] 의상
  • [프로그래머스 알고리즘 고득점 Kit][해시][Java] 포켓몬
  • [프로그래머스 알고리즘 고득점 Kit][해시][Java] 완주하지 못한 선수
수수다
수수다
우하하
  • 수수다
    그냥살자
    수수다
  • 전체
    오늘
    어제
    • 분류 전체보기 (20) N
      • 프로젝트 (1)
      • 알고리즘 & 자료구조 (17) N
        • 분리 집합 (1)
        • 정렬 (1)
        • 유클리드 호제법 (1)
        • 이분 탐색 (2) N
        • 해시 (5)
        • 그래프 (2)
        • 스택 (1)
        • 큐 (0)
        • 완전 탐색 (1)
        • DFS (0)
        • BFS (2)
        • 힙 (1)
      • 데이터베이스 (0)
      • CS (0)
      • 기타 (2)
  • 블로그 메뉴

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

    • 네이버 블로그
  • 공지사항

  • 인기 글

  • 태그

    SSAFY
    백엔드
    고가용성
    프로그래머스 알고리즘 고득점 kit
    코팅테스트
    싸피
    bfs
    이분탐색
    Java
    삼성청년SW·AI아카데미
    union-find
    유니온파인드
    그래프
    코딩테스트
    DisjointSet
    프로그래머스
    알고리즘
    깊이/너비 우선 탐색(DFS/BFS)
    바이브코딩
    완전탐색
    유클리드호제법
    디스조인트셋
    매개변수탐색
    코테
    비전공자
    분리집합
    평균회귀
    바킹독
    귀멸의칼날
    해시
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수수다
[프로그래머스 알고리즘 고득점 Kit][해시][Java] 전화번호 목록
상단으로

티스토리툴바