keymap
1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열배열 | ["ABACD", "BCEFD"] | 1 ≤ keymap의 길이 ≤ 100, 1 ≤ keymap의 원소의 길이 ≤ 100, keymap[i]는 i + 1번 키를 눌렀을 때 순서대로 바뀌는 문자를 의미, keymap의 원소의 길이는 서로 다를 수 있음
targets
입력하려는 문자열들이 담긴 문자열 배열 | ["ABCD","AABB"] | 1 ≤ targets의 길이 ≤ 100, 1 ≤ targets의 원소의 길이 ≤ 100, targets의 원소는 알파벳 대문자로만 구성
각 문자열을 작성하기 위해 키를 최소 몇 번씩 눌러야 하는지 순서대로 배열에 담아 return
(단, 목표 문자열을 작성할 수 없을 때는 -1을 저장)
알파벳 크기만큼 배열을 선언해서, 가장 빠르게 접근할때 누르는 횟수를 저장함. 해당 알파벳이 나오면 저장해둔 최소 횟수만큼 증가시키고, 없던 문자이면 -1을 리턴
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] min_push = new int[26];
Arrays.fill(min_push, Integer.MAX_VALUE);
for(int i=0; i<keymap.length; i++){
for(int j=0; j<keymap[i].length(); j++){
int idx = keymap[i].charAt(j)-'A';
min_push[idx] = Math.min(min_push[idx], j+1);
}
}
int[] ans = new int[targets.length];
for(int i=0; i<targets.length; i++){
for(char c : targets[i].toCharArray()){
int cnt = min_push[c-'A'];
if(cnt == Integer.MAX_VALUE){
ans[i] = -1;
break;
}
ans[i] += cnt;
}
}
return ans;
}
}
=> targets의 문자열의 길이가 제각각일수 있는데, 그 부분을 고려하지 않아 런타임에러 및 틀린 케이스를 접해 많이 헤맸음
Tip : 길이로 연산할때, 0번째 인덱스로만 해도 되는지, 그때그때 새롭게 길이를 가져와야하는지 고려해야 한다.
글 잘 봤습니다, 감사합니다.