개?발/프로그래머스

대충 만든 자판(java)

YUEIC 2024. 5. 30. 16:47

 

작성해야하는 코드의 구조를 다음과 같이 구상해보았다.

 

1. targets의 문자열을 하나씩 탐색한다.

2. targets의 문자열에 문자를 하나씩 탐색한다.

3. 그 문자를 keymap에 들어있는 문자열에서 몇번째에 존재하는지 각각 저장한다. 이때 존재하지 않으면 -1이 반환된다.

4. 위에서 저장한 순번들을 오름차순 정렬한다.

5. 만약 모든 값이 -1이라면 완성할 수 없는 목표이므로 -1을 저장.

5-1. 오름차순 정렬한 것 중 -1이 아닌 값들 중 가장 작은값을 더한다.

 

import java.util.Arrays;
class Solution {
    public int[] solution(String[] keymap, String[] targets) {
        int[] answer = new int[targets.length];

        for(int i = 0 ; i < targets.length ; i++){
            int count = 0;
            for(int j = 0 ; j < targets[i].length() ; j++){
                char t = targets[i].charAt(j);                  //현재 찾아야하는 문자

                int[] keyCount = new int[keymap.length];        //키맵의 개수만큼 배열 생성

                for(int k = 0 ; k < keyCount.length ; k++){     //각 매핑된 키에서 찾아야하는 문자의 순번을 담음
                    keyCount[k] = keymap[k].indexOf(t);
                }

                Arrays.sort(keyCount);                          //순번을 빠른순으로 정렬
                //System.out.println( Arrays.toString(keyCount));

                if(keyCount[keyCount.length - 1] == -1){        //맨 뒤의 값이 -1이면 모든값이 -1이기 때문에
                    count = -1;                                 //문자열을 구성할 수 없으므로 -1 반환
                    break;
                }else{
                    for(int key : keyCount){                    //순번을 순서대로 탐색
                        if(key > -1){                           //-1이 아닌 가장 작은 수를 만나면
                            count += key + 1;                   //count에 더하고
                            break;                              //for each 종료
                        }
                    }
                }

                //System.out.println("count : " + count);
            }
            answer[i] = count;
            //System.out.println("-----------------------");
        }
        return answer;
    }
}

 

 

'개?발 > 프로그래머스' 카테고리의 다른 글

문자열 내 p와 y의 개수  (0) 2024.07.05
두 정수 사이의 합  (0) 2024.07.05
덧칠하기(java)  (0) 2024.05.27
데이터 분석(Java)  (0) 2024.05.27
이웃한 칸(java)  (0) 2024.05.21