본문 바로가기
Algorithm/프로그래머스

[프로그래머스] 위장 / java

by 코딩친구 2021. 7. 1.
반응형

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

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

 

 

[ 코드 ]

 

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;

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

        for(int row = 0; row < clothes.length; row++) {
            String c = clothes[row][1];
            map.put(c, map.getOrDefault(c, 1) + 1);
        }

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

        return answer-1;
    }
}

 

 

HashMap을 이용하였다.

 

key에는 각 종 옷 종류를 넣고

value에는 map.getOrDefault(c, 1) + 1 을 넣어서 갯수를 저장했다.

 

map.getOrDefault(c, 1) + 1의 뜻은

map 안에 값이 존재하지 않으면 default 값인 1을 넣고 값을 +1 더해주겠다는 뜻이고,
map 안에 값이 이미 존재하면 c key에 해당하는 값을 가져와서 1을 더해준 값을 저장해준다는 뜻이다. 

 

한마디로 하나씩 발견할때마다 +1을 해주어 갯수를 value에 저장하겠다는 뜻이다.

보통 갯수를 저장할 때는 default 값을 0으로 해주고 시작하면 된다.

 

 

 

 

 

 

 

 

 

default 값을 1로 지정한 이유는 경우의 수를 구하기 위함이다.

종류가 하나 있는 경우 안 입기라는 경우의 수가 하나 추가 되는 것이기 때문에 default를 1로 주었다.

 

예를 들어

 

상의 : 안 입기, 빨간셔츠, 파란셔츠

하의 : 안 입기, 청바지, 면바지

 

3 * 3 - 1

 

둘 다 안 입는 경우의 수 하나만 빼준다.

 

 

 

※ 오늘의 교훈

메소드

map.getOrDefault(c, 1)+1

map.keySet()

map.get(key)

사용에 있어서 배웠다.

반응형