문제
https://school.programmers.co.kr/learn/courses/30/lessons/160586
생각한 것
코드
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int answer[] = new int[targets.length];
int sum = 0;
Map<Character, Integer> map = new HashMap<>(); // keymap
int count = 1 ; // 몇번 눌러야하는지 (최초 1)
// 각 알파벳이 몇번 눌러야 나오는지 구하기
// keymap 의 인수만큼 돌리기
for(int i = 0 ; i < keymap.length ; i++){
count = 1; // 인수 한번 돌면 다음 인수는 count 초기화
for(int j = 0 ; j < keymap[i].length() ; j++){
// 만약, map 에 기존의 key 가 있다면
if(map.containsKey(keymap[i].charAt(j))){
// 기존의 key가 있는데 , 그 값이 지금 count 보다 크면 교체
if(map.get(keymap[i].charAt(j)) > count){
map.put(keymap[i].charAt(j), count);
count++;
}else{
count++;
}
} else { // 기존의 키가 없을 때
map.put(keymap[i].charAt(j) /*char*/ , count);
count++;
}
}
}
for(int i = 0 ; i < targets.length ; i++){
sum = 0;
for(int j = 0 ; j < targets[i].length() ; j++){
if(map.containsKey(targets[i].charAt(j))){
sum += map.get(targets[i].charAt(j));
answer[i] = sum;
} else{
answer[i] = -1;
break;
}
}
}
return answer;
}
}
for와 if 문 범벅으로 문제가 해결 되었다..
for앞에서 count를 1로 초기화해줘 키 값이 없었을 경우에 value 값을 준 것과
charAt을 통해서 문자를 추출한 뒤 그 문자를 비교하는 것이 포인트였다.