1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열배열 keymap과 입력하려는 문자열들이 담긴 문자열 배열 targets가 주어질 때, 각 문자열을 작성하기 위해 키를 최소 몇 번씩 눌러야 하는지 순서대로 배열에 담아 return하는 solution함수를 작성하는 문제이다.
target에 저장된 문자열을 작성하기 위해 문자 하나에 대해 키를 최소 몇 번 눌러야하는지 계산하여 합한 다음 answer 배열에 저장한다. 키를 최소 몇 번 눌러야 하는지는 press(keymap배열, 탐색할 문자) 함수를 만들어 계산했다.
class Solution {
public 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++) {
int count = press(keymap, targets[i].charAt(j)); // targets[i]의 j번째 문자 쓰기 위해 키를 누르는 최소 횟
if (count == -1) { // keymap에서 targets[i].charAt(j)를 찾을 수 없으면 -1을 return
sum = -1; // 목표 문자열을 작성할 수 없으므로 sum에 -1 저장
break;
}
sum += count;
}
answer[i] = sum;
}
return answer;
}
private int press(String[] keymap, char c) {
int min = -1;
for (int i = 0; i < keymap.length; i++) {
for (int j = 0; j < keymap[i].length(); j++) {
if (keymap[i].charAt(j) == c) {
if (min == -1) { // c와 같은 문자를 처음 찾았다면(아직 min이 -1로 초기화된 상태라면)
min = j+1;
} else if (min > j) { // min이 -1이 아니고, j가 min보다 작다면
min = j+1;
}
break;
}
}
}
return min;
}
}