티스토리 뷰
programmers.co.kr/learn/courses/30/lessons/42578
문제는 위와 같으며, 먼저 주어진 이차원 배열을 {"의상의 종류": "해당 종류의 의상 수"} 형태의 Map으로 변환합니다. 이후 각 의상의 수 + 1을 최종 답에 곱한 뒤, 마지막으로 -1을 하여 답을 얻을 수 있습니다.
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
// {종류: 갯수} 형태 맵 생성
Map<String, Integer> clothesMap = new HashMap<>();
for (String[] clothe : clothes) {
// 종류 여부를 판단하여 없는 경우 0 + 1, 있는 경우 기존 갯수 + 1 값을 저장
clothesMap.put(clothe[1], clothesMap.getOrDefault(clothe[1], 0) + 1);
}
// 경우의 수 확인 answer *= (옷의 개수 + 입지 않을 경우)
for (int cnt : clothesMap.values()) {
answer *= (cnt + 1);
}
// 모든 옷을 입지 않는 경우는 없기 때문에 -1
return answer - 1;
}
}
경우의 수를 확인할 때 각 종류별로 옷을 하나씩 입는 경우(옷의 개수) + 해당 종류의 옷을 입지 않는 경우(1)를 구하였고, 옷의 종류는 독립적이기 때문에 모든 종류에 대해 경우의 수를 곱해줍니다.
최종적으로 나온 수에서 -1을 하는 이유는 아무 종류의 옷도 입지 않는 경우는 없기 때문에 이 경우를 제외시켜주는 것입니다.
Map에 해당 키가 포함되어 있는지 아닌지를 if 문으로 판단하지 않고 getOrDefault 메소드를 사용하여 처리함으로써 Null을 방지할 수 있었습니다. getOrDefault 메소드는 첫번째 파라미터로 주어진 값을 key로 하여 Map에서 값을 구하고 그 key가 존재하지 않는다면 두번째 파라미터 값을 기본 값으로 반환하는 메소드입니다.
'알고리즘' 카테고리의 다른 글
[프로그래머스] 주식 가격 (0) | 2021.04.02 |
---|---|
[프로그래머스] 베스트앨범 (0) | 2021.04.01 |
[알고리즘 / 백준] 1644 - 소수의 연속합 (0) | 2021.03.01 |
[알고리즘 / 백준] 2470 - 두 용액 (0) | 2021.03.01 |
[알고리즘 / 백준] 1806 - 부분합 (0) | 2021.03.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- string
- java
- AWS
- permutation
- EC2
- map
- 소수
- array
- ECR
- 조합
- ionic
- Baekjoon
- Algorithm
- DFS
- Dynamic Programming
- 순열
- programmers
- spring
- Combination
- cloudfront
- CodeDeploy
- 프로그래머스
- SWIFT
- 수학
- CodeCommit
- sort
- CodePipeline
- BFS
- 에라토스테네스의 체
- search
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함