Coding Test/JAVA 코딩테스트 풀이정리(프로그래머스)

프로그래머스 스쿨(Java - Lv.1) - 대충 만든 자판[복잡한 경우의 순회]
깝몬 2025. 4. 9. 19:39

문제

https://school.programmers.co.kr/learn/courses/30/lessons/160586

 

 

해답

class Solution {
    public int[] solution(String[] targets, String[] keymap) {        
        String[][] eachTargets = new String[targets.length][targets[0].length()];
        int[] answer = new int[keymap.length];
        for(int i=0;i<targets.length;i++)
            eachTargets[i] = targets[i].split("");

        for(int i=0;i<keymap.length;i++){
            String[] eachKeymap = keymap[i].split("");
            int count = 0;
            for(int j=0;j<eachKeymap.length;j++){ //keymap의 각 문자별로 순회
                int eachCount = 0;
                int minTargets = 200;
                for(int k=0;k<eachTargets.length;k++){ //각 targets별로 순회
                    int min = 200;
                    for(int l=0;l<eachTargets[k].length;l++){ //각 targets의 글자별로 순회
                        if(eachKeymap[j].equals(eachTargets[k][l])){
                            min = Math.min((l+1),min);
                            break;
                        }
                    }
                    if(min!=200)
                        minTargets = Math.min(min,minTargets);    
                }
                if(minTargets==200){
                    answer[i]=-1;    
                    break;
                }
                else{
                    count+=minTargets;   
                }
            }
            if(answer[i]!=-1)
                answer[i]=count;
        }
        return answer;
    }
}

 

 

해설

문제가 상당히 반복의 횟수가 많다.

 

일단 keymap의 길이가 100이라는것을 착안하여 200을 최소 클릭횟수로 미리 담아두었으며

 

최솟값을 갱신하는 방식으로 각 클릭횟수를 처리하였다.

 

그리고 그것을 합하여 처리하는 방식으로 문제를 풀어냈는데

 

이때 만약에 만들수없는 문자가 하나라도 존재할 경우때문에 곤혹을 겪었다.

 

만들수 없는 문자가 존재할 경우에는 다른 문자들이 되더라도 -1로 return해주어야하는데

 

그것을 boolean으로 처리하던가, 아니면 answer에 -1을 미리 박아버리는 방식으로 처리해야하여 후자를 택하였다.

 

해당 경우를 위한 테스트케이스

 

keymap(string[]) : ["ABC"]

targets(string[]) : ["DA"]

Return : [-1]

 

이것을 테스트케이스에 추가하여 풀어보면 될것같다.