[프로그래머스/Java] 위장 - Hashmap, 조합
Hashmap으로 푸는 문제라는건 알고 풀었고,.,,,
데이터셋이 아래처럼 나와서
arr[1] 의 값을 key값으로 넣고, value는 리스트를 넣어서 리스트에다 줄줄이 붙여넣었다.... 근데 리스트 할 필요없이 count만 하면 되겠네 지금 깨달음...
[[yellow_hat, headgear], [blue_sunglasses, eyewear], [green_turban, headgear]] | 5 |
[[crow_mask, face], [blue_sunglasses, face], [smoky_makeup, face]] | 3 |
일단 hashmap은 그렇게 활용했고,, hashmap으로 아이템을 정리한다음에 조합을 알아내야되는데
1~hashmap.size()개중 몇개를 입을지 정하고
종류가 선택되는거에 따라서 그 종류의 옷/아이템의 갯수를 또 곱해줘야되니까.. 막 머리가 아팠다.
배열에다가 key값 저장해서 조합한다음에 그 조합 결과에 따라서 각 key에 해당하는 value의 크기를 곱해줘서 다 더해서..,.,.,. 말로 쓰는것도 복잡하네........ 그래서 나온 코드가 아래코드고 한 한시간 한거같은데 계속 이곳저곳 걸리는 것 같아서 일단 딱 끊고 다른사람 코드 봤는데 엄청 간단함...ㅠㅠ 일단 망한 코드 먼저 올리면 아래와 같음.
import java.util.*;
class Solution {
static int i,answer = 0;
static int[] storage;
public int solution(String[][] clothes) {
Map <String, LinkedList<String>> hashmap = new HashMap<>();
LinkedList <String> linkedlist;
for(String[] each_clothes: clothes){
if(hashmap.get(each_clothes[1])==null){
linkedlist = new LinkedList<>();
linkedlist.add(each_clothes[0]);
hashmap.put(each_clothes[1],linkedlist);
}else{
// System.out.println(each_clothes[1]);
linkedlist = hashmap.get(each_clothes[1]);
linkedlist.add(each_clothes[0]);
hashmap.put(each_clothes[1],linkedlist);
}
}
// 옷 종류 조합
// --> 1개만 입을지, 2개입을지, ... (hashmap.size())개입을지
// 순서 의미X
storage = new int[hashmap.size()];
for(i=1; i<=hashmap.size(); i++){
combination(0);
break;
}
// 각 종류별로 갖고있는 옷 중 어떤거 입을지..
// --> hashmap.get(key[i]).length()?개 곱해주기
System.out.println(hashmap.toString());
System.out.println(hashmap.size());
return answer;
}
static public void combination(int cnt){
if(cnt == i){
storage
// answer +=
}
System.out.println("테스트");
}
}
그 다른사람 블로그에서 본 방법은 1,2,3, ... n개 고르는 경우를 다 고려하는게 아니었다.. 각 종류를 고른다/안고른다로 생각하는거였다..ㅠㅠ 각 종류를 고른다/안고른다로 생각하면 (item종류의 수*각 item종류의 옷/아이템 갯수)^2만큼에 경우의수가 생김.... 하나도 안입을 순 없어서 마지막에 -1 해주면 된다....고함.... 나 인적성 할때도 이부분 가끔 놓쳐서 헤매고 그랬는데 코딩하면서도 헤매넼ㅋㅋㅋㅋ
(item종류의 수*각 item종류의 옷/아이템 갯수)^2만큼에 경우의수 > (item 종류의 수 + 1)
왜냐하면, 그 종류를 선택했을 때만 item 종류의 수를 곱해주는거고, 그 종류를 선택하지 않는 경우의 수는 그냥 1이기때문.
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
Map <String, Integer> hashmap = new HashMap<>();
int answer = 1;
int temp = 0;
for(String[] each_clothes: clothes){
if(hashmap.get(each_clothes[1])==null){
hashmap.put(each_clothes[1],1);
}else{
temp = hashmap.get(each_clothes[1])+1;
hashmap.put(each_clothes[1],temp);
}
}
System.out.println(hashmap.toString());
for(String keys : hashmap.keySet()){
System.out.println(hashmap.get(keys)+1);
answer *= hashmap.get(keys)+1;
}
answer-=1;
return answer;
}
}