[프로그래머스] 위장 (JAVA/자바)

·2021년 7월 18일
2

Algorithm

목록 보기
19/60

문제

프로그래머스>코딩테스트 연습>고득점 Kit>해시 : 위장 - https://programmers.co.kr/learn/courses/30/lessons/42578

풀이

옷 조합의 경우의 수를 나열하는 것이 아니라 조합의 개수 만 알아내면 되기 때문에, 단순히 종류별 옷의 개수를 구한 뒤 전부 곱해주는 방식으로 풀이했다.

예를 들어 상의가 2개, 하의가 3개 있다면 상의를 0개/1개/2개 입는 경우와 하의를 0개/1개/2개/3개 입는 경우의 수가 생기는데, 각각을 곱하면 3x4 = 12가지의 경우의 수를 얻을 수 있다. 다만, 하루에 최소 한 개의 의상은 입는다 라는 조건이 있기 때문에 12에서 -1을 해주어 최종 결과값은 11이 된다.

코드

import java.util.HashMap;
class Solution {
    public static int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String, Integer> hash = new HashMap<>();

        // type별로 옷 종류가 몇개인지 세기
        for(int i=0; i<clothes.length; i++){
            String cloth_type = clothes[i][1];
            hash.put(cloth_type, hash.getOrDefault(cloth_type, 1) + 1);
        }

        for (String key : hash.keySet()) {
            answer *= hash.get(key);
        }

        return answer-1;
    }
}

정리

✔ 알고리즘 분류 - 해시
✔ 난이도 - Level 2

🤦‍♀️ 메모

  • Hash로 count하는 코드 잘 알아둘 것! HashMap에서 특정 key를 가진 value가 있는지 확인하고 있으면 value+1, 없다면 1로 삽입하는 코드이다. hash.getOrDefault() : 가져오거나 default값 주거나~
HashMap<String, Integer> hash = new HashMap<>();
hash.put(cloth_type, hash.getOrDefault(cloth_type, 1) + 1);

참고 사이트

딱히 없음

profile
당근먹고 자라나는 개발자

1개의 댓글

문제를 너무 복잡하게 생각해서ㅜㅜ 혼돈에 빠져있었는데 명쾌하고 깔끔한 풀이랑 코드 보고 많은 도움 받아갑니다! 감사합니다 !

답글 달기