문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/42578
<문제에서 제시된 조건>
• 코니는 최소 한 개의 의상은 입는다
• 코니는 카테고리당 최대 1가지 의상만 착용할 수 있다
• 한 가지의 의상이라도 다를 경우 다른 착장으로 계산한다
<접근 방법>
• 카테고리를 key 로 가지는 HashMap 을 생성
• 각 카테고리에 의상 갯수를 value 값으로 넣기
<풀이 로직>
간단한 경우의 수를 구하는 로직 구현
예) 상의 2개, 하의 3개일 경우 2 X 3 = 6
<고려할 사항>
• 아무 의상도 선택하지 않는 경우
• 특정 카테고리에서 선택을 하나도 안 하는 경우
<코드 작성>
1단계
카테고리별로 의상들을 담을 HashMap 을 생성
각 카테고리마다 의상들의 갯수를 순차적으로 대입
(신규 카테고리일 경우 0으로 초기화 후 +1) - getOrDefault
HashMap<String, Integer> clothesCntByCategory = new HashMap<>(); // 옷들을 담을 옷장
for (String[] getCategory : clothes) {
String category = getCategory[1]; // clothes[i][1]에 접근하여 카테고리 추출
// 신규 or 기존 카테고리에 의상 추가
clothesCntByCategory.put(category, clothesCntByCategory.getOrDefault(category, 0) + 1);
}
2단계
(카테고리당 의상의 갯수 + 1)을 곱하고
(해당 카테고리에서 선택을 안 하는 경우)
아무것도 안 입게 되는 경우는 배제
int answer = 1; // 곱셈을 위해 1로 초기화
for (int clothesCnt : clothesCntByCategory.values()) {
answer *= (clothesCnt + 1); // 카테고리 별 의상 갯수 + 1(아무것도 안 입는 경우의 수)
}
return answer - 1; // 하나도 안 입는 경우의 수 배제
Answer Code
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
HashMap<String, Integer> clothesCntByCategory = new HashMap<>(); // 옷들을 담을 옷장
for (String[] getCategory : clothes) {
String category = getCategory[1]; // clothes[i][1]에 접근하여 카테고리 추춣
// 신규 or 기존 카테고리에 의상 추가
clothesCntByCategory.put(category, clothesCntByCategory.getOrDefault(category, 0) + 1);
}
int answer = 1; // 곱셈을 위해 1로 초기화
for (int clothesCnt : clothesCntByCategory.values()) {
answer *= (clothesCnt + 1); // 카테고리 별 의상 갯수 + 1(아무것도 안 입는 경우의 수)
}
return answer - 1; // 하나도 안 입는 경우의 수 배제
}
}
728x90
반응형
'Misc 🗿 > Problem Solving' 카테고리의 다른 글
[프로그래머스] 알고리즘 고득점 kit - 올바른 괄호 (Stack/Queue) (0) | 2024.02.07 |
---|---|
[프로그래머스] 알고리즘 고득점 kit - 기능개발 (Stack/Queue) (0) | 2024.01.30 |
[프로그래머스] 알고리즘 고득점 kit - 베스트앨범 (Hash) (0) | 2024.01.11 |
[프로그래머스] 알고리즘 고득점 kit - 여행경로 (DFS) (0) | 2023.12.12 |