[ Programmers ] _ 의상 ( java )
📚 Table of Contents
문제
문제 설명
제한사항
입출력 예
문제 풀이
문제 접근 ( 알고리즘 )
- 2차원 배열인 [ 의상의 이름, 의상의 종류 ]를 의상 종류의 개수가 몇 개인지 분류해서 Hash Map에 담아야 한다.
- 예시 입력 : [ [ "yellow_hat", "headgear" ], [ "blue_sunglasses", "eyewear" ], [ "green_turban", "headgear" ] ]
- 옷의 종류는 :
headgear
,eyewear
- 그 옷의 종류의 개수 : [
headgear
: 2개] , [eyewear
, 1개]
- 옷의 종류는 :
- 출력 : 위 옷을 입는 경우의 수를 계산한다.
- 옷의 종류 마다 안 입는 경우가 있어 옷의 종류마다 +1를 해줘야 한다.\
- ( 2 + 1 ) * ( 1 + 1) = 6
- ( 2 + 1 ) * ( 1 + 1) = 6
- 옷을 모두 안입는 경우는 빼야하기 때문에 -1를 한다.
- 6 - 1 = 5
- 옷의 종류 마다 안 입는 경우가 있어 옷의 종류마다 +1를 해줘야 한다.\
- 예시 입력 : [ [ "yellow_hat", "headgear" ], [ "blue_sunglasses", "eyewear" ], [ "green_turban", "headgear" ] ]
풀이
import java.util.HashMap;
public class solution {
public int solution(String[][] clothes) {
// (key:의상의 종류, value:의상 개수) 를 담을 HashMap 선언
HashMap<String, Integer> map = new HashMap<String, Integer>();
// 입력 배열 만큼 반복
for (int i = 0; i < clothes.length; i++) {
// Map에 추가하려는 의상의 종류가 없는 경우
if (map.containsKey(clothes[i][1]) == false) {
// Map에 (의상종류, 1) 을 추가한다.
map.put(clothes[i][1], 1);
} else {
// Map에 추가하려는 의상의 종류가 이미 있는 경우
// Map에 (의상종류, n + 1)을 해준다.
map.replace(clothes[i][1], map.get(clothes[i][1])+1);
}
}
int answer = 1;
// Map의 key(의상 종류)를 순회한다.
for (String keys : map.keySet()) {
// map.get(key) 는 value(의상의 개수)를 반환
// answer = 옷 종류에 대한 경의우 수(곱의 법칙)
// +1를 하는 이유 : 그 의상을 안입는 경우의 수 추가
answer *= (map.get(keys) + 1);
System.out.println("answer = " + answer);
}
// -1를 하는 이유 : 모든 종류를 안입는 경우를 빼야함
return answer - 1;
}
}
'Coding > Programers' 카테고리의 다른 글
[ Programmers ] _ 짝수는 싫어요 ( java ) (0) | 2023.12.18 |
---|---|
[ Programmers ] _ 프로세스 ( java ) (0) | 2023.12.16 |
[ Programmers ] _ 나누어 떨어지는 숫자 배열 ( java ) (0) | 2023.12.13 |
[ Programmers ] _ 기능개발 ( java ) (1) | 2023.12.12 |
[ Programmers ] _ 같은 숫자는 싫어( java ) (0) | 2023.12.12 |