programmer level 2 - 위장 (hash map)
728x90
https://programmers.co.kr/learn/courses/30/lessons/42578
Hash map 과 순열 조합을 사용하여 문제를 해결 하였습니다.
예시
예를들어 headgear 가 3개고 eyewear 가 4 개라고 한다면 경우의 수는 headgear 가 총 4가지 eyewear 가 총 5가지 입니다.
headgear (0, 1, 2, 3) eyewear (0, 1, 2, 3, 4)
그렇다면 4 * 5 = 20 이라는 값이 나옵니다.
요기서 스파이는 매일 하루에 한벌은 입어야 한다는 가정이 있으므로 모든날 아무것도 입지않는 경우의수 1개를 뺍니다.
20 - 1 = 19
이것을 코드로 구현 해보겠습니다.
package io.programmers.stackQueue;
import java.util.*;
public class Camouflage {
public static int solution(String[][] clothes) {
int answer = 1;
Map<String, Integer> map = new HashMap<>();
for (String[] clothe : clothes) {
String category = clothe[1];
map.put(category, map.getOrDefault(category, 1) + 1);
}
for (Integer value : map.values()) {
answer *= value;
}
return answer - 1;
}
public static void main(String[] args) {
String[][] clothes = new String[][]{
{"yellowhat", "headgear"},
{"bluesunglasses", "eyewear"},
{"green_turban", "headgear"}
};
System.out.println(solution(clothes));
}
}
hashMap 의 getOrDefault 를 사용하여 해당 카테고리가 없는 경우 1 로 잡고 1을 더해주고 있는경우 그 값에서 1 을 더 합니다.
map 의 values 를 순회 하면서 answer 에 값을 곱해줍니다.
728x90
'Java > java - algorithm' 카테고리의 다른 글
좌표 정렬 구현하기 (Comparable) (0) | 2022.01.19 |
---|---|
javasciprt - 후위연산자 (postfix) 연산 stack (0) | 2021.08.17 |
java - 최대 길이 연속부분수열 (투포인트) (0) | 2021.07.30 |
java - 연속된 자연수의 합 (투포인터) (0) | 2021.07.29 |
java - 최대 매출(슬라이딩 윈도우) (0) | 2021.07.29 |
댓글
이 글 공유하기
다른 글
-
좌표 정렬 구현하기 (Comparable)
좌표 정렬 구현하기 (Comparable)
2022.01.19 -
javasciprt - 후위연산자 (postfix) 연산 stack
javasciprt - 후위연산자 (postfix) 연산 stack
2021.08.17 -
java - 최대 길이 연속부분수열 (투포인트)
java - 최대 길이 연속부분수열 (투포인트)
2021.07.30 -
java - 연속된 자연수의 합 (투포인터)
java - 연속된 자연수의 합 (투포인터)
2021.07.29