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

greenTea·2023년 8월 19일
0
class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        int[] alpha = new int[26];
        Arrays.fill(alpha,Integer.MAX_VALUE);
        for (String s : keymap) {
            
             if (s.isBlank())
                continue;
            
            for (int i = 0; i < s.length(); i++) {
                int str = s.charAt(i) - 'A';
                alpha[str] = Math.min(alpha[str],i+1);
            }
        }
        for (int i = 0; i < answer.length; i++) {
            for (char c : targets[i].toCharArray()) {
                if (alpha[c-'A'] == Integer.MAX_VALUE) {
                    answer[i] = -1;
                    break;
                }
                answer[i] += alpha[c-'A'];
            }
        }
        return answer;
    }
}

🫡흐름대로 푼다면 무난하게 풀 수 있는 문제입니다.
🥳위 아이디어의 핵심은 각 문자를 입력할 경우 어느 곳에서 버튼을 눌러야 가장 빠른 가입니다.

  1. 먼저 각 문자를 검사합니다. 비어 있을 경우 continue로 넘어가주고 그렇지 않다면 해당 문자를 순서를 계산합니다.(몇 번 째인지만 확인하면 됩니다.)
  2. 기존 값과 비교해 가장 작은 값을 alpha라는 배열에 넣어줍니다. 이 과정을 반복합니다.
  3. targets를 검사합니다. 이 때 Integer.MAX_VALUE의 경우에는 해당 문자를 입력할 수 없다는 의미로 -1을 반환해주시면 됩니다.
  4. 값이 존재할 경우 해당 값 만큼 더해주면서 for문을 돌아줍니다. 이 후 해당 값을 정답 값에 넣어주면 됩니다.

출처 : 프로그램서 - 대충 만든 자판

profile
greenTea입니다.

0개의 댓글