문제
https://school.programmers.co.kr/learn/courses/30/lessons/160586
접근 방법 및 풀이
keymap에서 각 알파벳을 입력 하기 위한 버튼의 최소 입력 횟수를 Map에 구하고, targets에 할당된 문자열을 입력하기 위한 버튼의 최소 입력 횟수를 위에서 구한 Map에서 구하여 합산
입력 할 수 없는 알파벳이 있는 경우 -1로 설정
import java.util.HashMap;
import java.util.Map;
/**
* https://school.programmers.co.kr/learn/courses/30/lessons/160586
*/
public class Q30_160586 {
public int[] solution(String[] keymap, String[] targets) {
// 입력 가능한 키와 입력하기 위한 최소 버튼 입력 횟수
Map<Character, Integer> keyCountMap = new HashMap<>();
for (String keys : keymap) {
int keyLength = keys.length();
for (int i = 0; i < keyLength; i++) {
char key = keys.charAt(i);
int min = Math.min(i + 1, keyCountMap.getOrDefault(key, Integer.MAX_VALUE));
keyCountMap.put(key, min);
}
}
// 입력 해야 하는 문자열에 대한 최소 버튼 입력 횟수 구하기
int[] answer = new int[targets.length];
for (int targetIndex = 0; targetIndex < targets.length; targetIndex++) {
String target = targets[targetIndex];
int targetLength = target.length();
int count = 0;
for (int i = 0; i < targetLength; i++) {
char text = target.charAt(i);
int value = keyCountMap.getOrDefault(text, -1);
if (value == -1) { // 입력이 불가능한 문자가 포함된 경우
count = -1;
break;
} else {
count += value;
}
}
answer[targetIndex] = count;
}
return answer;
}
}