728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
int answer = 1; // 종류별로 곱할 예정이라 1로 할당
HashMap<String, Integer> map = new HashMap<String, Integer>();
// 경우의 수는 종류+1 이다. 0인 경우도 포함해야하기 때문에!
// 조건에 최소 한 개는 입기 때문에 여기서 -1도 해주어야 함
// ex) (A+1)*(B+1)-1
// 옷의 타입별로 종류가 몇개인지 체크하는 것
for (int i = 0; i < clothes.length; i++) {
String type = clothes[i][1]; // 옷의 타입을 가져오기
// getOrDefault 메서드로 해당 키 값(옷의 타입)이 존재한다면 해당 key의 value를, 없다면 1로 가져와서 map에 추가하기
map.put(type, map.getOrDefault(type, 1) + 1);
} // for i
for (String key : map.keySet()) {
// 옷의 타입에 따른 종류를 곱하기
answer *= map.get(key);
} // foreach
return answer - 1; // 최소 한 개를 입는 경우 때문에 -1을 해줌
}
}
조합의 개수를 알면 풀 수 있는 문제이다.
모자 2개, 선글라스 4개가 있다면
모자는 0,1,2개, 선글라스는 0,1,2,3,4개로 위장을 하는 경우의 수가 생긴다.
각각 곱하면 3*5로 15가 된다.
여기서 '최소 한 개의 의상은 입는다'라는 조건 때문에 구한 경우의 수에서 -1을 해주어야 한다.
728x90
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 / Hash (0) | 2022.08.12 |
---|---|
[백준] 14425번 문자열 집합 / Hash (0) | 2022.08.11 |
[프로그래머스] 최대공약수와 최소공배수 구하기 / 유클리드 호제법 (0) | 2022.08.09 |
[백준] 2178번 미로탐색 / 그래프 탐색(BFS/DFS) (0) | 2022.08.06 |
[백준] 2606번 바이러스 / 그래프 탐색(BFS/DFS) (0) | 2022.08.06 |