관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[알고리즘] 프로그래머스 전화번호 목록 -해시(Hash)- 본문

알고리즘/해시

[알고리즘] 프로그래머스 전화번호 목록 -해시(Hash)-

막무가내막내 2020. 5. 14. 23:13
728x90

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

 

프로그래머스

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

programmers.co.kr

 

 

 

프로그래머스 LEVEL 2 의 해시문제를 풀어봤습니다.

유형이 해시라고 적혀있어서 HashMap을 사용해서 풀었는데 다른 분들의 풀이를 보니깐 해시로 푸는 사람들이 거의 없는거 같더라고요. 

그래서 제가 푼 방식과 다른분이 풀이방식을 같이 남겨봅니다.

 

저같은 경우는 해쉬맵을 사용해서 각 전화번호들을 추가하고 전화번호부에서 하나씩 번호를 불러오고 

불러온 번호를 한자리씩 읽어가며 해쉬맵과 비교하여 접두사가 있는지 없는지 체크하는 방식으로 풀었습니다.

 

효울성테스트도 있어서 3중 for문이라 망했다 싶었는데 통과해서 다행이네요 ㅎㅎ

 

다음은 제 풀이입니다. (참고로 같은 번호는 존재할 수 없습니다.)

import java.util.HashMap;

class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.solution(new String[]{	"123", "456", "789"});
    }

    static String[] phone_book;
    static HashMap<String, Integer> map;
    public boolean solution(String[] phone_book) {
        Solution.phone_book = phone_book;
        map = new HashMap();

        //접두사 초기화
        for (int i = 0; i < phone_book.length; i++) {
            map.put(phone_book[i], map.getOrDefault(phone_book[i], 0) + 1);
        }

        for (int i = 0; i < phone_book.length; i++) { //전화번호부 전번 하나씩 불러옴
            for (int j = 0; j < phone_book[i].length(); j++) { //전화번호 한자리씩 읽어서 비교
                String num = phone_book[i].substring(0, j + 1);
                if (checkPrefix(num, i)) {
                    return false;
                }
            }
        }
        return true;
    }

    //접두사인 경우인지 체크
    public boolean checkPrefix(String num, int index) {
        for (int i = 0; i < phone_book.length; i++) {
            //자신의 접두사를 제외한 나머지 번호들의 접두사와 비교해서 해당되는게 있으면 true 반환
            if (map.getOrDefault(num, 0) >= 1 && !phone_book[index].equals(num)) {
                return true;
            }
        }
        return false;
    }
}

 

 

 

 

 

다른분의 풀이입니다. 그냥 문자열 조작으로 풀었습니다. 대부분 분들의 풀이방식입니다.

 

 

출처 : https://sas-study.tistory.com/214

 

 

댓글과 공감은 큰 힘이 됩니다. 감사합니다!

728x90
Comments