CODING TEST

프로그래머스 - 대충 만든 자판

우진하다 2023. 8. 10. 16:36

 

풀이.

처음 문제를 풀었을 때 최소 횟수를 제대로 매핑하지 못해서 테스트 케이스를 많이 틀렸다.
먼저 HashMap map 에 키와 밸류를 매핑해주는데
이때 기존에 키를 가지고 있다면 더 작은 값을 넣어주는게 일단 중요함.

그리고 또 테스트 케이스를 틀리게 했던 부분은
문제 의도를 잘못해석해서 키가 없을 경우 -1을 넣어줘야 하는데
그냥 전체를 -1로 리턴했다.. 

가령 keymap 이 ["AA"] 이고 targets가 ["B", "A"] 라면
정답은 [-1, 1]이 되어야 하는데 문제를 잘못 이해해 그냥 [-1]로 리턴한 것.

이 두 부분만 잘 이해하고 넘어갔다면 쉽게 풀 수 있었을텐데
아직 문제 파악이 서툰것 같다. 그래도 끙끙대며 맞추기 성공!

import java.util.HashMap;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        HashMap<Character, Integer> map = new HashMap<>();
        
        // 최소 키패드 값 매핑
        for (int k = 0; k < keymap.length; k++) {
            String s = keymap[k];
            for (int i = 0; i < s.length(); i++) {
                char ch = s.charAt(i);
                int press = i + 1;
                map.put(ch, Math.min(press, map.getOrDefault(ch, press)));
            }
        }
        
        // targets 배열 돌면서 
        // 키 없으면 sum = -1 넣어주고 inner for문 break;
        for (int i = 0; i < targets.length; i++) {
            int sum = 0;
            for (int j = 0; j < targets[i].length(); j++) {
                char ch = targets[i].charAt(j);
                if (!map.containsKey(ch)) {
                    sum = -1;
                    break;
                }
                sum += map.get(ch);
            }
            answer[i] = sum;
        }

        return answer;
    }
}

 

 

 

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/160586