문제링크:https://programmers.co.kr/learn/courses/30/lessons/42578
해쉬를 이용해서 조합을 구하는 문제
문제는 다음과 같다.
눈장식- 선글라스, 안경
머리장식- 헤드밴드, 헬멧, 모자
이런식으로 있다고 생각할때, 아래와 같이 안쓴경우도 생각한다.
눈장식- 선글라스, 안경,안씀
머리장식- 헤드밴드, 헬멧, 모자 ,안씀
그럼 눈장식과 머리장식의 경우의 수는
3*4=12 이다. 이때 안씀 *안씀 의 경우도 있는데, 아무것도 안쓸순없으니 이 경우의수를 한번 빼면 11이다.
저렇게 눈장식, 머리장식 종류에 따라서 리스트를 만들려면
[모자, 머리장식] 으로 되어있는 배열을 받았을때 해쉬맵으로 만들어주고 부위별 링크드 리스트를 통해서 받아주면된다.
키-값은
부위-부위별종류의리스트
String, LinkedList<String>
이다.
그러면 아래처럼 구현하면 된다.
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 0;
int count=0;
HashMap<String, LinkedList<String>> hm = new HashMap<>();
for(String[] s: clothes){
if( hm.containsKey(s[1])){ //이미 있다면?
LinkedList<String> ll = new LinkedList<>();
ll= hm.get(s[1]);
ll.add(s[0]);
hm.replace(s[1],ll);
count++;
}//처음이라면
else{
LinkedList<String> ll = new LinkedList<>();
ll.add(s[0]);
hm.put(s[1],ll);
count++;
}
}
//구하는식: 헤드기어2개 눈장식 1개면 안입은경우도 포함해서 3개 ,2개로 생각하고 3*2를하고 안낀것과 안낀것의 조합은 없으니까 그걸 1개 빼면 3*2-1 하면된다.
int ans=1;
int cn=0;
for(String s : hm.keySet()){
ans *= hm.get(s).size()+1;
}
ans-=1;
answer= ans;
return answer;
}
}
직접 구현한 코드이므로 무단복제를 금지합니다.
'ETC > 기타 프로그래밍' 카테고리의 다른 글
프로그래머스[Java] - K번째수 (0) | 2021.09.24 |
---|---|
프로그래머스[Java] - 다리를 지나는 트럭 (0) | 2021.09.21 |
프로그래머스[Java] - 전화번호 목록 (0) | 2021.09.20 |
프로그래머스[Java] - 완주하지 못한 선수 (0) | 2021.09.19 |
[VS Code] 내코드를 자동으로 예쁘게 만들어주는 Prettier 사용하기 (0) | 2021.01.19 |