본문 바로가기
algorithm/Programmers

[JAVA] 전화번호 목록

by 이쟝 2023. 3. 29.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

HashSet.contains(Object var1) 

어떤 객체가 HashSet에 존재할 때 true, 없을 경우 false

HashMap.containsKey(Object key) 

해당 키 값이 HashMap에 있을 경우 true, 없을 경우 false
파라미터로 입력받은 값과 같은 값이 있으면 true 

HashMap.containsValue( ) 

해당 값이 HashMap에 있을 경우 true, 없을 경우 false

 

hashSet을 이용한 풀이

import java.util.HashSet;
import java.util.Arrays;

class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        HashSet<String> hash = new HashSet<>(Arrays.asList(phone_book));

        for(int i=0; i<phone_book.length;i++) {
            for(int j=1; j<phone_book[i].length();j++) {
                if(hash.contains(phone_book[i].substring(0,j))) answer = false;
            }
        }

        return answer;
    }
}

 

  • for문을 돌려서 HashSet에 넣는게 아니라 Arrays.asList를 사용해서 String 배열을 HashSet에 넣었다.
  • 이중 for문 => 모든 전화번호의 substring이 HashSet에 존재하는지 확인
  • int j=i+1;은 코드는 성공적으로 실행되지만 테스트케이스에서 오류가 난다...!
  • int j=0보다는 int j=1가 for문 조금 덜 돈다!

hashMap을 이용한 풀이

import java.util.HashMap;

class Solution {
    public boolean solution(String[] phone_book) {
        HashMap<String, Integer> hash = new HashMap<>();

        for(String phone : phone_book) {
            hash.put(phone, 1);
        }

        for(int i=0;i<phone_book.length;i++) {
            for(int j=1; j<phone_book[i].length();j++) {
                if(hash.containsKey(phone_book[i].substring(0,j))) return false;
            }
        }
        return true;
    }
}

 

  • containsKey()로 구분하기 때문에 value값은 필요없다..! HashSet과 동일한 로직

+ Arrays.sort( ) 와 Startswith( )를 활용한 풀이

import java.util.Arrays;

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

 

  • sort를 하지 않으면 안됨!

참고

전화번호 목록

 

[프로그래머스] 전화번호 목록 (해시 Lv. 2) - 자바 Java

0. 동일 유형 문제 [프로그래머스] 완주하지 못한 선수 (해시 Lv. 1) [프로그래머스] 전화번호 목록 (해시 Lv. 2) [프로그래머스] 위장 (해시 Lv. 2) [프로그래머스] 베스트 앨범 (해시 Lv. 3) Youtube 영상으

coding-grandpa.tistory.com

 

'algorithm > Programmers' 카테고리의 다른 글

[JAVA] 기능 개발  (0) 2023.03.30
[JAVA] 같은 숫자는 싫어  (0) 2023.03.29
[JAVA] 완주하지 못한 선수  (0) 2023.03.28
[JAVA] 폰켓몬  (0) 2023.03.28
[JAVA]숨어있는 숫자의 덧셈 (2)  (0) 2023.03.25