[프로그래머스] LV2. 전화번호 목록

journey📸·2021년 9월 18일
0

코딩테스트 - JAVA

목록 보기
3/7

💻 문제

전화번호 목록

🔎 나의 해결 방식

처음에 이 문제를 해시를 이용하여 풀라고 하길래 굳이..? 하고 처음에 생각난대로 startsWith()를 사용하여 문제를 풀었다. 잘 풀었는데 계속 효율성 3, 4번째에서 실패를 했다. 문제를 보니 최근 변경된 테스트케이스가 startsWith()를 사용해서 푸는 방식이 통과가 안되는 모양이다..
그래서 결국 해시를 이용해서 풀기로 했다.

📝 풀이 순서

📍
일단 phone_book에있는 전화번호를 HashMap에 put을 했다.

HashMap<String, String> map = new HashMap<>();
for(String str: phone_book){
	map.put(str,"");
}

대체 왜 해시를 사용해서 풀어야하는가 생각했던 이유가 키와 값의 쌍을 뭘로 해야할지를 몰라서였다. 사실 아직도 이유는 모르겠지만 키만 신경쓰고 값은 신경 안쓰기로 했다.

📍

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

이중포문과 subString()을 이용했다. 0부터 전화번호 길이까지 자른 문자열과 동일한 키가 있는지 containsKey()를 이용하여 검색했고, 존재하면 바로 false를 리턴하도록 했다.

💡 코드

import java.util.HashMap;
class Solution {
    public boolean solution(String[] phone_book) {

        HashMap<String, String> map = new HashMap<>();
        for(String str: phone_book){
            map.put(str,"");
        }


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

    }
}
profile
https://iwntberich.tistory.com/

0개의 댓글