[Java] Lv.2 프로그래머스 전화번호 목록

rse·2023년 8월 31일
0

알고리즘

목록 보기
34/44

설명

분류가 해시로 되어있다.
그래서 Map 을 이용해서 풀었다.

접두어 란 문장의 시작부분에 겹치는 문자가 들어있는지 를 의미한다.

예제에서는 "119" 라는 문자열이 지영석의 전화번호 앞 글자에 있으므로 접두사가 있는 것이다.

그래서 처음 코드를 생각할 때는 맨 앞에 접두어가 있으니 맨 앞에 문자열을 기준으로 찾으면 되겠다 생각했는데 예제에는 없지만 접두어가 맨 뒤에 있는 경우도 있다.

그래서 모든 문자열을 Map 에 저장한 다음 문자열을 한글자 씩 잘라 map 에서 해당 문자열이 있는지를 탐색했다. 다만 그렇게 탐색할 경우 접두어도 같이 인식이 되므로 문자열의 마지막 글자를 빼고 key 값을 비교해야한다.

이 문제는 있으면 false 를 리턴하고 없으면 true 를 리턴한다.

코드

import java.util.*;
class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        Map<String, Boolean> map = new HashMap<>();

        for (int i = 0; i < phone_book.length; i++) {		// map 에 문자열 저장
            map.put(phone_book[i], true);
        }

        for (int i = 0; i < phone_book.length; i++) {		
            String s = "";		
            for (int j = 0; j < phone_book[i].length() -1; j++) {
                String str = String.valueOf(phone_book[i].charAt(j));
                s += str;
                if (map.containsKey(s)) {		// map 에서 해당하는 키가 있는지 탐색
                    answer = false;
                }
            }
        }

        return answer;
    }
}
profile
기록을 합시다

0개의 댓글