본문 바로가기
문제풀이

위장-해쉬

by 이숴 2023. 4. 5.
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제요약]

  • 스파이는 하루에 최소 한 개의 의상은 입습니다.
  • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
  • 옷들의 조합의 수를 반환하세요.

 

[문제풀이]

저는 먼저 해쉬맵에 옷의 종류별로 담아뒀습니다. 

옷의 종류 예시

 

[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]

예시와 같은 상태에선,

{"headgear":["yellow_hat", "green_turban"], "eyewear":["blue_sunglasses"]}

같이 배열에 구성되도록이요!!

 

이렇게 되면 이제 경우의 수를 전부 구하면 됩니다. 경우의 수를 왜 구하는가.

 

예시에서는 헤드기어가 총 2개 존재합니다. 스파이는 총 3가지의 경우의수가 있겠죠?

1.yellow_hat을 쓴다.

2. green_turban을 쓴다.

3. 아무것도 쓰지 않는다.

 

안경은 총 1개 존재하니 경우의 수는 다음과 같을 겁니다.

1. blue_sunglasses"를 쓴다.

2. 아무것도 쓰지 않는다.

 

그렇다면 총 3 X 2가지의 경우의수가 존재하겠죠? 하지만 조건에서는 스파이는 아무것도 입지않는 날은 없고 하루에 최소 한개의 옷은 입는다 라는 조건 때문에, 둘다 아무것도 쓰지 않는 경우는 제외시켜야합니다.

 

따라서 3 X 2 - 1 = 5 가지의 경우의 수가 정답이 되게 됩니다.

[코드]

import java.util.*;
class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String, Integer> hm = new HashMap<>();
        for(int i =0; i<clothes.length; i++){
            hm.put(clothes[i][1], hm.getOrDefault(clothes[i][1],0) + 1);
        }
        for(String key : hm.keySet()) {
            answer *= hm.get(key) + 1
        }
        return answer-1;
    }
}
반응형

'문제풀이' 카테고리의 다른 글

문자열 폭발 - 문자열  (2) 2023.04.18
롤케이크_자르기-구현 JAVA  (0) 2023.04.10
부대복귀-BFS  (0) 2023.03.28
2589-보물섬  (0) 2023.03.21
11060-점프점프  (0) 2023.03.16

댓글