본문 바로가기
카테고리 없음

[프로그래머스] Lv1. 대충 만든 자판 - Java

by CuckooBird 2024. 9. 9.

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;
    }
}

 

https://github.com/kwakminjung/Programmers/blob/main/Lv1/%EB%8C%80%EC%B6%A9%20%EB%A7%8C%EB%93%A0%20%EC%9E%90%ED%8C%90.java

 

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 존재 여부를 확인하는 작업이 반드시 필요한 것 같습니다.