코딩테스트

[Programmers/JAVA] 전화번호 목록

Eun 2022. 1. 7. 16:15

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

 

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

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

programmers.co.kr

1. 배열의 startsWith()를 사용하는 방법

import java.util.*;

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;
    }
}

1. 오름차순으로 정렬한다.

2. for문을 써서 바로 다음 배열이 현재 배열로 시작하는지 확인(startsWith)

3. 배열로 시작하면 false, 아니면 true 반환한다.

 

2. HashMap의 containsKey()을 사용하는 방법

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        
        HashMap<String, Integer> hm = new HashMap<>();
        
        //  모든 전화번호를 hashmap에 넣는다.
        for(String s: phone_book) hm.put(s, 1);
        
        // i의 길이만큼 자르고 해시맵에 존재하는지 확인
        for(int i=0;i<phone_book.length;i++){
            for(int j=0;j<phone_book[i].length();j++){
                if(hm.containsKey(phone_book[i].substring(0,j))) return false;
            }
        }
        
        return true;
        
    }
}

1. 모든 전화번호를 HashMap에 넣는다.

2. substring()으로 현재 전화번호의 길이만큼 자르고 자른 번호가 해시맵에 존재하는지 확인한다.

3. 존재하면 false, 존재하지않으면 true 반환

 

 

'코딩테스트' 카테고리의 다른 글

[BOJ_10844/JAVA] 쉬운 계단 수  (0) 2022.01.11
[BOJ_15990/JAVA] 1,2,3 더하기 5  (0) 2022.01.10
[BOJ_1463/JAVA] 1로 만들기  (0) 2022.01.06
[Programmers/JAVA] 소수 찾기  (0) 2022.01.05
[BOJ_6588/JAVA] 골드바흐의 추측  (0) 2021.12.30