코딩 테스트/99클럽
[99클럽] 코테 스터디 1일차 TIL - Map과 조합
토자맨
2024. 5. 22. 15:53
Map 인터페이스와 구현 클래스들
Map은 key, value 쌍으로 구성된 자료구조이다.
중복을 허용하지 않는다.
Map을 구현한 클래스로는 HashMap, TreeMap, HashTableMap이 있다.
HashMap
HashMap은 Map 인터페이스를 상속하여 구현한 클래스로서 중복을 허용하지 않는다.
key or value 값으로써 null 을 허용한다.
TreeMap
HashMap과 다르게 SortedMap을 상속하였고 key 값들에 대한 정렬이 이루어진다.
HashTableMap
HashMap과 다르게 key 또는 value 값으로써 null 을 허용하지 않는다.
HashMap 함수
- HashMap
- getOrDefault(key, default값)
- key가 없다면 default 반환 / key가 있다면 value 반환
- ex. clothesCountMap.put(category, clothesCountMap.getOrDefault(category, 0) + 1);
- clothesCountMap 해시맵에 category인 key가 있다면 value 반환 / 없다면 0 반환
- getOrDefault(key, default값)
오늘의 회고
발생한 문제와 해결 방법
로직 자체는 단순해서 큰 흐름은 쉽게 잡았지만
HashMap 문법을 몰랐고 조합 개념을 까먹어서 두 부분을 추가로 공부했다.
새롭게 알게 된 내용
HashMap 자료구조 문법과 조합 개념을 복습했다.
내일 학습할 내용
- 5월 21일 2일차 코테 문제
- 프레임워크 프로그래밍 프로젝트 과제
- 일본어 복습 및 히라가나 복습
작성한 코드
문제 해결 로직
- clothes 2차원 배열을 돌면서 HashMap<옷종류, 개수> 형태로 저장
- Map을 돌면서 개수를 곱하는데 이때 옷 입지 않는 경우까지 더해서 곱합
- 아무것도 입지 않는 경우를 빼고(-1) 반환함
종류별 옷의 개수를 모두 곱하면 되는 간단한 조합 문제이다.
간단한 조합 개념만 안다면 쉽게 풀 수 있는 문제인데 조합 개념을 까먹어서 한참을 헷갈렸다.
import java.util.HashMap;
import java.util.Map;
/*
* clothes 2차원 배열을 돌면서 HashMap<옷종류, 개수> 형태로 저장
* Map을 돌면서 개수를 곱하는데 이때 옷 입지 않는 경우까지 더해서 곱합
* 아무것도 입지 않는 경우를 빼고(-1) 반환
*/
class Solution {
public int solution(String[][] clothes) {
Map<String, Integer> clothesCountMap = new HashMap<>();
// clothes 배열의 행을 돌면서 옷 종류의 개수를 세고 Map 형태로 개수 저장
for (String[] pair : clothes) {
String category = pair[1];
// clothesCountMap에 카테고리(옷종류)가 있다면 +1 없다면 1
// getOrDefault(key, default값) : key가 없다면 default 반환 / key가 있다면 value 반환
// 만약 카테고리가 없다면 0을 반환한 후 +1을 하므로 새로운 카테고리에 1이 들어감
clothesCountMap.put(category, clothesCountMap.getOrDefault(category, 0) + 1);
}
// 조합 개념을 까먹어서 헷갈림
// 옷 종류별 개수를 모두 곱하여 조합 계산
int answer = 1;
for (int cnt : clothesCountMap.values()) {
// 옷을 입지 않는 경우(1)
answer *= (cnt + 1);
}
// 아무것도 입지 않는 경우 -1
return answer - 1;
}
}