https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 로직
1. 우선 옷 종류 만큼 조합을 구한다. -> 옷 종류의 합을 2진수로 나타낸다.
2. 옷 종류에 옷 개수가 여러개인 비트 자리마다 1인 count 를 세서 그만큼 더해준다.
[AB CD]
A,C,AC
B, BC
D,AD
<참고>
nCr = n-1Cr-1 + nCr-1;
Combination 을 생각하면서 여러가지로 잘못된 접근을 했다.
옷 종류 개수를 더해서 2진수 A로 나타내면 비트마다 하나씩 옷 종류를 의미한다고 정의했다.
A의 Combination 을 구한다.
그리고 각 비트가 1이 되는 경우마다 그 옷 종류의 옷 개수에 맞춰 더해주는 방식이다.
너무나도 어렵게 생각했던 것 같다. ㅠㅠ
질문하기에서 다른분의 코드를 보면서 이해가 되었다.
다른 분의 코드
import java.util.HashMap;
import java.util.Map;
class Solution {
public static int solution(String[][] clothes) {
Map<String, Integer> map = getClothesPartCountMap(clothes);
// 모든 부위를 착용 안하는 경우의 수 - 1
return getAnswer(map) -1;
}
private static int getAnswer(Map<String, Integer> map) {
int answer = 1;
for (String s : map.keySet()) {
// 착용안하는 경우의 수 = +1
answer *= (map.get(s)+1);
}
return answer;
}
private static Map<String, Integer> getClothesPartCountMap(String[][] clothes) {
Map<String, Integer> map = new HashMap<>();
for (String[] clothe : clothes) {
if (map.containsKey(clothe[1])) {
map.put(clothe[1], map.get(clothe[1]) + 1);
continue;
}
map.put(clothe[1], 1);
}
return map;
}
}
'알고리즘 > 문제' 카테고리의 다른 글
*[프로그래머스] Lv2 이모티콘 할인행사 / JAVA (0) | 2023.03.17 |
---|---|
*[프로그래머스] Lv2 택배 배달과 수거하기 / JAVA (0) | 2023.03.15 |
[프로그래머스] Lv2 행렬의 곱셈 / JAVA (0) | 2023.03.09 |
*[프로그래머스] Lv2 2018 KAKAO BLIND RECRUITMENT[1차] 캐시 / JAVA (0) | 2023.03.09 |
[프로그래머스] Lv2 괄호 회전하기 / JAVA (0) | 2023.03.08 |