class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
int[] alpha = new int[26];
Arrays.fill(alpha,Integer.MAX_VALUE);
for (String s : keymap) {
if (s.isBlank())
continue;
for (int i = 0; i < s.length(); i++) {
int str = s.charAt(i) - 'A';
alpha[str] = Math.min(alpha[str],i+1);
}
}
for (int i = 0; i < answer.length; i++) {
for (char c : targets[i].toCharArray()) {
if (alpha[c-'A'] == Integer.MAX_VALUE) {
answer[i] = -1;
break;
}
answer[i] += alpha[c-'A'];
}
}
return answer;
}
}
🫡흐름대로 푼다면 무난하게 풀 수 있는 문제입니다.
🥳위 아이디어의 핵심은 각 문자를 입력할 경우 어느 곳에서 버튼을 눌러야 가장 빠른 가입니다.
- 먼저 각 문자를 검사합니다. 비어 있을 경우
continue
로 넘어가주고 그렇지 않다면 해당 문자를 순서를 계산합니다.(몇 번 째인지만 확인하면 됩니다.)- 기존 값과 비교해 가장 작은 값을 alpha라는 배열에 넣어줍니다. 이 과정을 반복합니다.
- targets를 검사합니다. 이 때
Integer.MAX_VALUE
의 경우에는 해당 문자를 입력할 수 없다는 의미로 -1을 반환해주시면 됩니다.- 값이 존재할 경우 해당 값 만큼 더해주면서
for문
을 돌아줍니다. 이 후 해당 값을 정답 값에 넣어주면 됩니다.
출처 : 프로그램서 - 대충 만든 자판