반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42578
1) 내가 구현한 코드
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
// "type" : count
Map<String,Integer> clothMap = new HashMap<>();
for(String[] cloth:clothes){
clothMap.put(cloth[1], clothMap.getOrDefault(cloth[1],0)+1);
// System.out.println(cloth[0]);//cloth
// System.out.println(cloth[1]);//type
}
// System.out.println(clothMap);
//Map.get(Object key) : 키값 반환
//Map.getOrDefault(Object key, V defaultValue): 특정 키가 없을 때 기본값 반환
//Map.keySet() : 모든 키를 Set 형태로 반환
//Map.values() : 모든 값을 Collection 형태로 반환
//Map.entrySet() : 키-값 쌍으로 이루어진 Map.Entry 객체들의 Set을 반환
//Map.putIfAbsent(Object key, value) : 특정 키가 없을 때만 키와 값을 추가
for(Integer value:clothMap.values()){
answer *= (value+1);
}
answer = answer-1;
return answer;
}
}
2) 오늘의 학습 키워드
- 조합 계산 및 의상 분류
- 해시맵을 이용한 데이터 관리
- 조합 수 계산의 수학적 원리
3) 공부한 내용 정리
이 문제는 코니가 가진 의상들을 조합하여 서로 다른 착용 방법의 수를 계산하는 문제이다.
각 의상은 종류별로 나뉘어 있으며, 각 종류에서 하나의 의상만 착용할 수 있다.
의상의 조합을 계산하기 위해 해시맵을 사용하여 각 종류의 의상 개수를 세고, 이를 통해 조합의 수를 계산한다.
4) 문제 해결 과정
- 의상 종류별로 의상 개수 세기:
- 의상 종류를 키로 하고, 각 의상 개수를 값으로 저장하는 해시맵을 생성한다.
- 조합 수 계산:
- 각 의상 종류별로 (의상 개수 + 1)을 곱하여 조합 수를 계산한다.
- 여기서 +1은 해당 종류의 의상을 선택하지 않는 경우를 포함하기 위함이다.
- 최종 결과 반환:
- 조합 계산 후 아무 의상도 입지 않는 경우를 제외하기 위해 최종 결과에서 1을 뺀다.
- 추가 구현 코드:
import java.util.HashMap;
public class Solution {
public int solution(String[][] clothes) {
HashMap<String, Integer> clothingMap = new HashMap<>();
// 의상 종류별로 개수 세기
for (String[] cloth : clothes) {
String type = cloth[1];
clothingMap.put(type, clothingMap.getOrDefault(type, 0) + 1);
}
// 조합 수 계산
int combinations = 1;
for (int count : clothingMap.values()) {
combinations *= (count + 1); // 각 의상 종류별로 (의상 개수 + 1) 곱하기
}
// 아무 의상도 입지 않는 경우 제외
return combinations - 1;
}
public static void main(String[] args) {
Solution sol = new Solution();
String[][] clothes1 = {
{"yellow_hat", "headgear"},
{"blue_sunglasses", "eyewear"},
{"green_turban", "headgear"}
};
System.out.println(sol.solution(clothes1)); // 출력: 5
String[][] clothes2 = {
{"crow_mask", "face"},
{"blue_sunglasses", "face"},
{"smoky_makeup", "face"}
};
System.out.println(sol.solution(clothes2)); // 출력: 3
}
}
5) 오늘의 회고
- 문제점
- 의상 조합 수를 효율적으로 계산하기 위한 알고리즘을 찾는 데 어려움이 있었다.
- 시도한 방법
- 해시맵을 사용하여 의상 종류별 개수를 세고, 수학적 원리를 적용하여 조합 수를 계산하는 방법으로 문제를 해결하였다.
- 새롭게 알게 된 점
- 의상 조합 문제에서 해시맵을 활용해 데이터를 구조적으로 관리하는 방법과,
- 조합 계산의 수학적 원리를 통해 효율적인 알고리즘을 설계할 수 있다는 것을 확인하였다.
- 내일 학습 목표
- 다양한 조합 문제를 풀어보고, 더 복잡한 데이터셋을 다루는 연습을 통해 알고리즘 문제 해결 능력을 키울 것이다.
반응형
'coding_test' 카테고리의 다른 글
[99클럽 4기 코테 스터디 TIL 6일차] 할리갈리 (feat. 해시맵, BufferedReader, Bufferedwriter, HashMap.containsValue()) (0) | 2024.11.02 |
---|---|
[99클럽 4기 코테 스터디 TIL 5일차] 모스부호 (feat. 해시맵, BufferedReader, Bufferedwriter) (0) | 2024.11.01 |
[99클럽 4기 코테 스터디 TIL 4일차] 숫자 문자열과 영단어 (0) | 2024.10.31 |
[99클럽 4기 코테 스터디 TIL 3일차] 문자열 나누기 (0) | 2024.10.30 |
[99클럽 4기 코테 스터디 TIL 2일차] 크기가 작은 부분 문자열 (0) | 2024.10.30 |