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
'프로그래머스 문제' 카테고리의 다른 글
[JAVA/프로그래머스]두 정수의 짝꿍 찾기: 알고리즘 문제 해결 방법 (0) | 2024.02.22 |
---|---|
[JAVA/프로그래머스] 평행 (0) | 2024.02.20 |
[JAVA/프로그래머스] 덧칠하기 (1) | 2024.01.31 |
[JAVA/프로그래머스] 신고 결과 받기 (0) | 2024.01.30 |
[JAVA/프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2024.01.29 |