https://school.programmers.co.kr/learn/courses/30/lessons/160586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
가장 쉬운 풀이대로 한다면 4중 for문이 될 것 같은 기분이 들어 두 번째 작전이었던 hashmap을 이용하였습니다.
hashmap에 char: int 의 key: value 쌍으로 만들어서 value에는 최소한으로 누를 수 있는 숫자를 갱신합니다.
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
HashMap<Character, Integer> map = new HashMap<>();
// keymap을 바탕으로 map 갱신
for(int i=0; i<keymap.length; i++) {
for(int j=keymap[i].length()-1; j>=0; j--) {
Character c = keymap[i].charAt(j);
if(map.containsKey(c)) map.put(c, Math.min(j+1, map.get(c)));
else map.put(c, j+1);
}
}
// targets 결과 확인
for(int i=0; i<targets.length; i++) {
for(int j=0; j<targets[i].length(); j++) {
Character c = targets[i].charAt(j);
if(map.containsKey(c)) answer[i] += map.get(c);
else {
answer[i] = -1;
break;
}
}
}
return answer;
}
}
Programmers/Lv1/대충 만든 자판.java at main · kwakminjung/Programmers
프로그래머스 코딩테스트 문제 풀기. Contribute to kwakminjung/Programmers development by creating an account on GitHub.
github.com
회고
- map 안에 해당 key 값이 있는지 확인 할 때에는 map.containsKey(key)로 알 수 있습니다. contains()로 썼다가 계속 에러가 났습니다.
- Hashmap의 꺽쇠 안, 즉 제네릭의 파라미터로는 reference type만 들어갈 수 있기 때문에 char, int, double 과 같은 자바 원시(primitive) type을 넣을 수 없습니다.
- map에 containsKey 여부를 확인하지 않으면 NullPointer 에러가 날 수 있기 때문에 hashmap을 사용할 때에는 containsKey로 key 존재 여부를 확인하는 작업이 반드시 필요한 것 같습니다.