본문 바로가기
  • Thank you for visiting.....
프로그래머스 문제

[JAVA/프로그래머스] 대충 만든 자판

by HyunSoooo 2024. 2. 2.
728x90

안녕하세요

 

 

문제 상황

휴대폰의 자판은 각 키에 여러 개의 문자가 할당될 수 있습니다. 동일한 키를 연속해서 빠르게 누르면 할당된 순서대로 문자가 바뀌는 방식입니다. 예를 들어 1번키에 "A","B","C"가 순서대로 할당되어 있다면, 1번 키를 한 번 누르면 "A"가, 두 번 누르면 "B"가 , 세 번 누르면 "C"가 이렵됩니다.

 

문제 해결 전략

주어진 무자열을 작성하기 위해 각 문자를 입력하는 데 필요한 최소 키 입력 횟수를 계산합니다. 문자열 내의 각 문자에 대해, 해당 문자가 할당된 카를 찾고, 그 키를 몇 번 눌러야 해당 문자가 입력되는지 계산합니다. 모든 문자에 대해 이 과정을 반복하여 전체 키 입력 횟수를 합산합니다.

 

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

        for(int i=0; i<targets.length; i++){
            String target = targets[i];
            int keyPressCount = 0;
            boolean isPossible = true;

            for(char letter : target.toCharArray()){
                int minKeyPress = Integer.MAX_VALUE;
                for(int k=0; k<keymap.length; k++){
                    int index = keymap[k].indexOf(letter) + 1;
                    if(index > 0) {
                        minKeyPress = Math.min(index, minKeyPress);
                    }
                }
                if(minKeyPress == Integer.MAX_VALUE){
                    isPossible = false;
                    break;
                }else{
                    keyPressCount += minKeyPress;
                }
            }
            answer[i] = isPossible ? keyPressCount : -1;
        }
        return answer;
    }
}

 

코드 설명

  • keymap 배열은 각 키에 할당된 문자들을 나타냅니다.
  • targets 배열은 입력하고자 하는 문자열들을 담고 있습니다.
  • 각 타겟 문자열에 대해, 문자열을 구성하는 각 문자가 keymap에 있는지 확인하고, 해당 문자를 입력하기 위해 필요한 키 입력 횟수를 계산합니다.
  • 만약 특정 문자를 입력할 수 없는 경우(-1을 반환해야 하는 경우), 해당 문자열에 대한 처리를 중단하고 -1을 결과 배열에 저장합니다.
  • 문자열을 작성할 수 있는 경우, 필요한 총 키 입력 횟수를 결과 배열에 저장합니다.
728x90