th42500의 TIL

[Java] 해시 - 위장 (Lv2) 본문

Algorithm/Programmers

[Java] 해시 - 위장 (Lv2)

th42500 2022. 3. 1. 21:55

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

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

✔ 입출력 예시

위장 입출력 예시

 

✔ 소스코드

package Hash;

import java.util.HashMap;

public class camouflage { // 위장

    public static void main(String[] args) {
        String[][] clothes = { { "yellowhat", "headgear" }, { "bluesunglasses", "eyewear" },
                { "green_turban", "headgear" } };

        System.out.println(solution(clothes));
    }

// 프로그래머스에 입력할 답안

    private static int solution(String[][] clothes) {
        // int answer = 0;

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

        for (int i = 0; i < clothes.length; i++) {
            String t = clothes[i][1];
            map.put(t,  map.getOrDefault(t, 1) + 1);  // 착용을 안했을때까지 합쳐서 1부터 시작
        }

        // 확인
        for (String key : map.keySet()) {  
            System.out.println(String.format("타입 : %s, 값: %d", key, map.get(key)));
        }

        int answer = 1;
        // 조합의 수 구하기
        for (int cnt : map.values()) {
            answer *= cnt;
        }

        answer -= 1;  // 모두 착용x

        return answer;
    }

}

 

💡 포인트
1️⃣ HashMap을 사용하여 2차원 배열인 clothes의 옷의 타입(key)별로 개수(value) 저장
    👉 착용을 안한 경우(none)까지 합쳐서 value를 1부터 +1
2️⃣ map의 값들을 모두 answer에 곱해주기
    👉 곱셈을 하기 위해 answer = 0이 아닌 answer = 1
3️⃣ 제한사항의 스파이는 하루에 최소 한 개의 의상은 입습니다. 를 위해 answer - 1(옷 타입이 모두 none인 상태) 후

     return

Comments