대충 만든 자판

문제


문제 풀이

keymap 배열에서 입력된 값중 하나가 존재 할 때 가장 가까운 인덱스 값들을 더해서 결과 배열에 담아줘야하는 문제이다. 

for문을 여러번 사용해야 하는 문제로 중간에 논리적 정리가 복잡해지면 이상한 값들을 볼 수 있는 문제이다. 


나의 답안

public static int[] solution(String[] keymap, String[] targets) {
    int[] answer = new int[targets.length];

    for (int i = 0; i < targets.length; i++) {
        int sum = 0;
        for (int j = 0; j < targets[i].length(); j++) {
            char tc = targets[i].charAt(j);
            int min = Integer.MAX_VALUE;

            for (int k = 0; k < keymap.length; k++) {
                for (int l = 0; l < keymap[k].length(); l++) {
                    if (!keymap[k].contains(String.valueOf(tc))) break;
                    if (keymap[k].charAt(l) == tc && min > l + 1) {
                        min = l + 1;
                    }
                    if (min == 1) break;
                }
                if (min == 1) break;
            }

            if (min == Integer.MAX_VALUE) {
                answer[i] = -1;
                break;
            } else {
                sum += min;
                answer[i] = sum;
            }
        }
    }

    return answer;
}

다른 답안

입력된 값이 keymap에 존재 한다면 그 값을 가지고 있는 인덱스 넘버를 list에 담아 두었다가 나중에 제일 작은 값을 가진 리스트를 결과에 더해주고 배열에 담아주는 방식을 사용하였음. 

import java.util.*;

class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];
        for(int i = 0; i < targets.length; i++){ //타겟 중 1개
            int result =0;
            for(int j= 0; j < targets[i].length(); j++){ // 타켓의 문자
                List<Integer> list = new ArrayList<>();
                for(int k= 0; k < keymap.length; k++){ // keyMap 개수 비교
                    if(keymap[k].contains(String.valueOf(targets[i].charAt(j)))){
                        list.add(keymap[k].indexOf(String.valueOf(targets[i].charAt(j)))+1);
                    }
                }
                if(list.isEmpty()){
                    result = -1;
                }
                else {
                    result += Collections.min(list);
                }
            }
            answer[i] += result;
        }
        return answer;
    }
}

'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글

신고 결과 받기  (0) 2023.03.29
개인정보 수집 유효기간  (0) 2023.03.29
둘만의 암호  (0) 2023.03.27
성격 유형 검사하기  (0) 2023.03.27
햄버거 만들기  (0) 2023.03.27