코딩테스트

[프로그래머스 / lv 2] 전화번호 목록 (JAVA_해시)

lyndaa 2023. 3. 16. 20:47

문제


풀이방법

  • 배열
    • 이중포문을 돌며 String class의 함수인 startsWith을 사용하여 true 반환 시 false 리턴
  • 해시맵(HashMap)
    • substring 함수를 통해 0부터 각 전화번호의 모든 숫자까지 돌며 해시맵에 포함되는지 확인하여 해당 시 false 리턴
    • 같은 전화번호가 중복되지 않기 때문에 각 전화번호를 확인 할 필요 없음( substring 마지막 문자 전까지)
    • value 값은 쓰이지 않으므로 HashSet으로 사용 가능
  • 해시셋(HashSet)
    • 해시맵과 동일

코드

👇🏻 HashMap

package hashmap_pro;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Solution3 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        Solution3 s = new Solution3();
        System.out.println(s.solution(arr));
        System.out.println(s.solution2(arr));
        System.out.println(s.solution3(arr));

    }
    public boolean solution(String[] phone_book){
        Map<String,Integer> map = new HashMap<>();
        int value=0;
        for(String str : phone_book){
            map.put(str,value);
            value++;
        }
        for(int i=0; i<phone_book.length; i++){
            for(int j=1; j<phone_book[i].length(); j++){
                if(map.containsKey(phone_book[i].substring(0,j))){
                    return false;
                }
            }
        }

        return true;
    }
}

👇🏻 배열

 public boolean solution2(String[] phone_book){
        for(int i=0; i< phone_book.length-1; i++){
            for(int j=i+1; j<phone_book.length; j++){
                if(phone_book[i].startsWith(phone_book[j])){
                    return false;
                }else if(phone_book[j].startsWith(phone_book[i])){
                    return false;
                }
            }
        }
        return true;
    }

👇🏻 HashSet

public boolean solution3(String[] phone_book){
        Set<String> set = new HashSet<>();
        for( String str : phone_book){
            set.add(str);
        }
        for( String str : phone_book){
            for(int i=1; i<str.length(); i++) {
                if (set.contains(str.substring(0,i))) {
                    return false;
                }
            }
        }

        return true;
    }