코딩테스트/프로그래머스

[해시] 위장 - JAVA

의정부핵꿀밤 2022. 4. 20. 15:27
728x90

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

이 문제 기억하지?

저번에 파이썬이랑 c++로 풀어본 문제야

근데 자바로는 안했더라고

이건 알고리즘은 기억하고 있어서 그냥 쉽게 풀었는데, 자바에서 해시맵 사용법이 헷갈려서 그것만 간단하게 정리하려고!

 

우선 코드!

import java.util.HashMap;

public class 위장 {
    public static void main(String[] args) {
        String[][] clothes = {{"yellowhat", "headgear"}, {"bluesunglasses", "eyewear"},{"green_turban", "headgear"}};
        solution(clothes);
    }
    public static int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String,Integer> map = new HashMap<>();
        for(int i=0;i<clothes.length;i++) {
            if(!map.containsKey(clothes[i][1])){
                map.put(clothes[i][1], 1);
            } else {
                map.replace(clothes[i][1], map.get(clothes[i][1])+1);
            }
        }
        for(String key : map.keySet()) {
            answer *= (map.get(key)+1);
        }
        answer--;
        return answer;
    }
}

 

우선 HashMap은 저렇게 선언했어

HashMap<String, Integer> map = new HashMap<>();

< >에서 앞에 오는게 key 값이고, 뒤에 오는게 value야

문제에서는 의상 종류가 key 값이 되고, value에는 해당 의상 종류의 개수를 저장할거라서 String, Integer로 선언했어

 

 

그리고 HashMap에 값을 넣을 떄는 put을 사용해

map.put(key, 1);

put 하고 앞에 key, 뒤에 value 쓰면 돼

 

 

담에 값을 업데이트하려면 replace 사용하면 돼

map.replace(key, updateValue);

뭔지 알지??

 

 

해시 값의 value를 얻어오려면 get 사용!

map.get(key);

get 하고 뒤에 key 값 쓰면 value 얻어올 수 있어!

 

 

 

해시맵에 해당 키값이 있는지 확인하려면 containsKey 사용!

map.containsKey(clothes[i][1]);

true/false로 반환한다잉

 

 

마지막으로 해시맵 반복문 사용법!

for(String key : map.keySet()) {
    answer *= (map.get(key)+1);
}

keySet쓰면 반복문으로 key 값 얻어올 수 있는데, 그 key값을 get에 넣어서 value 가져오면 돼!

 

 

끝!

728x90