728x90
※ 해당 문제의 링크는 여기입니다. ※
public int solution(String[][] clothes) {
HashMap<String, Integer> parts = new HashMap<>();
for (String[] clothe : clothes) {
String key = clothe[1];
parts.put(key, parts.getOrDefault(key, 0) + 1);
}
int answer = 1;
for (Map.Entry<String, Integer> entry : parts.entrySet()) {
answer *= entry.getValue() + 1;
}
return answer - 1;
}
HashMap를 사용하여 풀었습니다.
각 위치에 따른 원소가 몇 개인지만 파악하면 금방 풀 수 있기에 getOrDefault를 사용하였습니다.
getOrDefault는 map에 이미 해당 키가 있다면 값을 받고 아니라면 default 값을 반환해주는 메소드입니다.
map에 값을 추가할 때마다 value에 +1씩 계속 추가해서 총 갯수를 파악하고
각 key가 가지고 있는 value의 갯수가 정해지면
1씩 더해준 뒤 모두 곱합니다.
그리고 마지막에 -1를 빼주면 됩니다.
원리는 단순합니다.
예시를 들자면
value가 3개인 key와 value가 2개인 key가 있다면
3개짜리 key에서는 각자의 원소와 아예 안 뽑는 경우까지
4가지 경우가 있습니다.
그리고 2개짜리 key에서도 마찬가지로 3가지 경우의 수가 생깁니다.
이때, 둘 다 뽑지않는 경우 역시 포함하게 되는 데
이는 해당 문제에서 최소 한 개이상 있어야하므로 해당 경우의 수를 없애기 위해 -1를 합니다.
이상입니다.
'공부 > 알고리즘, 자료구조' 카테고리의 다른 글
[프로그래머스] 기능개발 (0) | 2022.02.14 |
---|---|
[프로그래머스] K번째 수 (0) | 2022.02.12 |
[프로그래머스] 베스트 앨범 (0) | 2022.02.11 |
[프로그래머스] 전화번호 목록 (0) | 2022.02.09 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.02.08 |