위장

유태형·2022년 2월 18일
0
post-thumbnail

문제

문제 분석

조합의 수를 보는 문제인것 같다. 순서는 중요하지 않고 어떤 종류들을 묶느냐가 중요한 문제인것 같다.




풀이

해시

같은 카테고리를 묶어야 하므로 해시맵을 사용하여야 한다.
(key,value)로 이루어진 쌍을 각각 (String ,Integer)(카테고리, 나온수)로 묶자

import java.util.HashMap;
HashMap<String,Integer> hashmap = new HashMap<>();

메소드

hashmap.put(key,value) //(해당key존재X)삽입,(해당Key존재)갱신
hashmap.containsKey(key) //해시맵에 key존재 여부
hashmap.get(key) //value 반환

조합의 수

각 옷들은 단독으로 사용될 수 있고 심지어 벌거벗고 모자만 쓰는 경우도 가능하므로 조합을 정할때 단독으로 사용되는 상황도 고려되어야 한다.

처음 나왔을때 1부터가 아닌 2부터 시작한다면 단독으로 사용될때도 고려될 수 있을 것이다.

for(int i=0;i<clothes.length;i++){
//해당 의상 종류를 사용하지 않는 경우도 고려하여 0이 아닌 1부터 시작
	int count = hashmap.getOrDefault(clothes[i][1],1);
	hashmap.put(clothes[i][1],count+1); // 1을 더하여 저장
}

이미 옷의 카테고리 clothes[i][1]이 존재한다면 기존의 갯수를 꺼내와 1을 추가하고 갱신하다.
반면에 처음 나온 카테고리라면 1이 아닌 2로 추가한다.

조합 수

while(iter.hasNext()){
       answer *= iter.next();
   }
return answer - 1;

해시맵에 존재하는 값들을 읽어 와 곱한다.

예를 들어
(A,H),(B,H),(C,K),(D,L)이 있다고 가정하자
H종류는 2개, K종류는 1개, L종류는 1개 있으므로 각각

H 1 2
K 1
L 1

일까? 각각 단독으로 사용되는 경우도 고려하여야한다.

H 0 1 2
K 0 1
L 0 1

0은 단독으로 사용되고 1부터는 다른 종류와 조합될수 있다고 생각하면

1. A
2. B
3. C
4. D
5. A+C
6. A+D
7. B+C
8. B+D
9. C+D
10. A+C+D
11. B+C+D

3 * 2 * 2 - 1 = 11만큼 조합할 수 있다.




코드

import java.util.HashMap;
import java.util.Iterator;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String,Integer> hashmap = new HashMap<String,Integer>();
        
        //각 의상의 종류마다 갯수를 구함
        for(int i=0;i<clothes.length;i++){
            //해당 의상 종류를 사용하지 않는 경우도 고려하여 0이 아닌 1부터 시작
            int count = hashmap.getOrDefault(clothes[i][1],1);
            hashmap.put(clothes[i][1],count+1); // 1을 더하여 저장
        }
        
        Iterator<Integer> iter = hashmap.values().iterator();
        while(iter.hasNext()){
            answer *= iter.next(); //수학적 접근 필요, 카테션 곱인듯?
        }
        return answer - 1;
    }
}



GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%EC%9E%90%EB%B0%94/Level2/%EC%9C%84%EC%9E%A5.java

profile
오늘도 내일도 화이팅!

0개의 댓글

관련 채용 정보