요새 매일매일 코테를 준비하며 프로그래머스 문제를 풀고 있다. 처음엔 완전히 막혔지만 그래도 이젠 어느 정도 풀이가 떠오르긴 한다. 한 가지 아쉬운 점은 생각보다 클래스마다 다양한 메서드를 가지고 있고 이를 잘 알고 활용해야 한다는 점이다.
제일 많이 나오는 유형인 해시 문제를 마주하고 문제를 풀기 위해 활용할 메서드를 검색해서 이를 활용하여 문제를 풀었지만 한번 정리해볼 만한 가치가 있다고 생각이 들어서 이렇게 정리하게 되었다.
문제 설명
위장이라는 문제인데,
옷의 종류와 옷의 이름으로 이루어진 2차원 배열을 가지고
그 경우의 수를 구하는 문제이다. 매일 옷을 다르게 입어야 하고,
하루에 옷 1개는 무조건 입는 조건이다. 해시를 이용해 풀란다.
풀이
public int solution(String[][] clothes) {
Map<String, Integer> map = new HashMap<>();
int answer = 1;
for (int i = 0; i < clothes.length; i++) {
map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0) + 1);
}
for (Map.Entry<String,Integer> entry : map.entrySet()) {
answer *= entry.getValue() + 1;
}
return answer - 1;
}
- 배열 길이만큼 반복을 하며 map에 엔트리를 넣어준다. (키에 옷, 값에 숫자)
- 값의 개수만큼 반복을 하며 정답에 곱해주며 연산을 한다.
- 옷 1개는 무조건 입어야 하기에 -1을 해준다.
구글링을 하며 map 관련 메서드들을 찾아가며 문제를 풀었지만, 해당 메서드들을 확실히 정리해야 나중에 까먹지 않을 것 같아 정리를 해보겠다.
getOrDefault(Object key, V DefaultValue)
매개변수 :
key : 키
defaultValue : 키에 매핑된 값이 없는 경우 반환되는 기본 값
=> 찾는 key가 존재하면 매핑된 값을 반환하고 없을 경우 default 값이 반환된다.
Map.Entry
Map 형태의 인터페이스를 만드는데 사용
Map을 이용해 반복하거나 인터페이스 용도로 사용하거나 Stream 사용 시 Map 형식 데이터 처리가 필요할 때 사용한다.
public Set<Map.Entry<K,V>> entrySet()
해당 map의 key, value를 가지는 Set 객체를 리턴
반복문에서 주로 사용
keyset()도 있는데 이는 key만 얻어올 경우 사용한다.
내 코드에서는 엔트리도 필요하므로 entrySet()을 사용했다.
참조: https://hianna.tistory.com/573
참조 : https://wakestand.tistory.com/649
반응형
'📖 Algorithm > 코딩테스트' 카테고리의 다른 글
2022.05.24 「Lv.3 입국심사」 (0) | 2022.05.24 |
---|---|
2022.05.18 「Lv.2 Heap 더 맵게」 (0) | 2022.05.18 |
2022.05.17 「Lv.2 프린터」 (0) | 2022.05.17 |
2022.05.16 「Lv.2 카펫」 (0) | 2022.05.16 |
2022.05.12 「LV2 소수 찾기」 (0) | 2022.05.12 |