티스토리 뷰

문제 : programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

아이디어

주어진 부위의 의류를 입지 않는 것 또한 하나의 선택지로 간주하면 계산이 매우 빠르고 편리해진다.

 

예를 들어, 주어진 예시 #1의 경우 headgear에 2종류, eyewear에 1종류의 의류가 주어졌는데, 여기에 "선택 안함" 선택지를 추가하면 각각 3종류, 2종류가 된다.

그러면 선택 가능한 총 가짓수는 3 * 2 = 6가지가 되는데, 문제에 주어진 조건에서 최소 한 개의 의상은 입는다고 하였으므로 모두 "선택 안함"을 선택하는 한 종류를 빼주면 결과값으로 5를 얻을 수 있다.

 

소스코드

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

class Solution {
    public int solution(String[][] clothes) {
        // key: 의상의 종류
        // value: 의상의 갯수
        Map<String, Integer> spyClothes = new HashMap<>();

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

        int answer = 1;
        Iterator<Integer> iter = spyClothes.values().iterator();
        while (iter.hasNext()) {
            answer *= iter.next();
        }

        return answer - 1;
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함