[99클럽 코테 스터디 1주차 보너스문제 TIL] 프로그래머스 의상

말하는 감자·2024년 10월 31일
0
post-thumbnail

99클럽 코테 스터디 1주차 보너스문제 TIL

💙 JAVA 비기너

📌 오늘의 학습 키워드

  • 해시

📌 공부한 내용

📍 오늘의 문제

📍작성 코드

import java.util.Map;
import java.util.HashMap;
import java.util.Map.Entry;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        
        Map<String, Integer> clothMap = new HashMap<String, Integer>( );
        
        for(String[] cloth : clothes) {
            clothMap.put(cloth[1], clothMap.getOrDefault(cloth[1] , 0) + 1);
        }

        
        for (Entry<String, Integer> entry : clothMap.entrySet()) {
            answer *= entry.getValue() + 1;
        }
        
        return answer - 1;
    }
}

📌 오늘의 회고

만약에 상단에 해시라고 적혀있지 않았으면 리스트를 통해 풀다가 꽝꽝 막혔을 것 같다. 다행이 해시라고 힌트가 적혀있었고 오랜만에 보는 해시에 당황하는 것도 찰나 검색하니 많은 사람들이 정말 깔끔하게 정리를 해놔서 그저 복붙해오면 되었다.(어이;;)

HashMap은 유니크한 key와 그에 해당하는 value로 정해져있기 때문에 여러값을 관리해야하는 문제에 적합하다.

먼저 2차원 배열인 clothes를 foreach문을 통해 HashMapclothMap에 옷의 종류에 따라 정리했다.

처음 기본값을 어떻게 가져가야할까?
키가 있으면 값을 가져오고 없으면 0으로 만드는 로직을 하나 더 짜야하나?

하면서 구글에 "java hashmap 기본값"을 검색해오니 HashMap.getOrDefault()를 잘 설명해준 사람들이 많았다.

HashMap.getOrDefault(키, 기본값)을 하면 우선적으로 키에 대한 값을 반환하고 해당 키에 대한 값이 없다면 기본값으로 셋팅해준다.

이렇게 옷의 종류에 따라 키에는 옷의 종류를 값으로는 옷의 가지수를 넣게 셋팅해줬다.

for(String[] cloth : clothes) {
	clothMap.put(cloth[1], clothMap.getOrDefault(cloth[1] , 0) + 1);
}

HashMap을 foreach문으로 Entry로 가져올 수 있는 것도 구글링의 결과...ㅎ
HashMap을 하나씩 돌면서 옷 가짓수 + 1을 하여 answer에 곱해줬다.

경우의 수를 구하는 방식은 모든 가짓 수를 곱하는 것인데 이 문제에서는 그 가짓수가 없는 경우도 포함되어야 하기 때문에 1을 추가해서 곱해줬다.

for (Entry<String, Integer> entry : clothMap.entrySet()) {
	answer *= entry.getValue() + 1;
}

그리고 모든 옷이 없는 경우를 없애야하기 때문에 answer에 - 1을 하여 반환했다.


HashMap 오랜만에 보니 반갑기도 하고 다 까먹어서 앗차 싶기도 했다. 요즘 계속 문자열 문제만 보다가 만나니 새로워서 더 반가웠던 것 같다. 오랜만에 퀘퀘 묵었던 기억들이 검색을 통해 떠오르게 되니 재밌기도 했고 HashMap.getOrDefault()라는 새로운 함수를 알게 되었서 기뻤다.


📑 참고자료

profile
나는 말하는 감자다

0개의 댓글