1. 문제 풀이 아이디어
- 각 문자를 입력하는 데 필요한 최소 횟수를 배열에 저장하면 문제를 해결할 수 있다.
2. 나의 정답 코드
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
int[] alphabet = new int[26];
for (String key : keymap) {
int index = 1;
for (char c : key.toCharArray()) {
alphabet[c - 'A'] = alphabet[c - 'A'] == 0 ? index : Math.min(alphabet[c - 'A'], index);
index++;
}
}
for (int i = 0; i < targets.length; i++) {
String target = targets[i];
int result = 0;
for (char c : target.toCharArray()) {
if (alphabet[c - 'A'] == 0) {
result = -1;
break;
}
result += alphabet[c - 'A'];
}
answer[i] = result;
}
return answer;
}
}
3. 정리
keymap
에서 키를 읽어 각 문자를alphabet
배열의 해당 위치에 저장한다. 배열의 값이0
이면 문자열에서의 위치를 저장하고, 값이 이미 있으면 더 작은 값을 저장한다.
targets
배열에서 각target
의 문자를 확인하여,alphabet
배열에서 값을 찾는다. 값이0
이면 결과값에-1
을 넣고 반복을 중단한다. 값이0
이 아니면 해당 값을 결과값에 더한다.
- 계산한 결과값을
answer
배열에 저장하여 문제를 해결한다.
Share article