본문 바로가기
Coding Test/Programmers

[프로그래머스] 전화번호 목록 [JAVA(자바)]

‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀

문제 👉 <코딩테스트 연습 - 전화번호 목록 | 프로그래머스>

1. 문제

  1. 주어진 전화번호 중, 한 번호가 다른 번호의 접두어이면 false 아닐 경우 true를 리턴한다.
  2. 중복된 전화번호는 없다.

2. 풀이

해시 를 이용한 문제 풀이

  1. 모든 전화번호를 통해 key는 전화번호 value는 0을 가지는 Hash를 생성한다.
  2. for문을 통해 모든 전화번호가 전화번호 맨앞 2자리 숫자부터 마지막 자리 숫자까지 Hash에 있는지 탐색한다. 단, 탐색 전에 자기 자신의 번호를 구분하기 위해 Hash에서 자기 자신의 value는 1로 변경 후 탐색한다.
  3. 탐색이 끝난 후 다시 value는 0으로 변경한다.

3. 코드

import java.util.*;
class Solution {
    public boolean solution(String[] phone_book) {
        HashMap<String,Integer> hm = new HashMap<>();

        for(String num:phone_book) hm.put(num,0);
        for(String num:phone_book){
            hm.put(num,1); // 자기 자신은 1로 설정
            for(int i=1; i<=num.length(); i++){
                if(hm.containsKey(num.substring(0,i))){
                    if(hm.get(num.substring(0,i)) != 1) { // 자기 자신이 아닐 경우
                        return false;
                    }
                } 
            }
            hm.put(num,0); // 자기 자신 다시 0으로 설정
        }

        return true;
    }
}

자바로 코딩테스트를 시작한지 얼마 안되어서 코드가 굉장히 저퀄리티다… 나중에 꼭 코드 수정하겠습니다…



References


🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글