본문 바로가기

Programmers/프로그래머스

[프로그래머스][JAVA] 위장

[문제]

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장 | 프로그래머스

 

programmers.co.kr

[풀이방법]

 

 

의상 이름말고 개수로 생각합니다. 

 

즉, HashMap은 <의상종류, 해당 의상종류의 개수> 이렇게 정의합니다. 

 

이제 주어진 이차원 문자열 배열을 탐색하면서 해당 의상 종류에 맞는 키가 존재하면 그 키에 대응되는 value의 값을 1만큼 증가하고 

존재하지 않으면 해당 키를 생성하고 값으로 1을 넣어줍니다. 

 

이후에는 경우의 수를 구합니다. (경우의 수 공식 = 따로 발생하는 사건의 경우의 수 (m + n) / 동시에 발생하는 사건의 경우의 수 (m * n))

 

 


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
31
32
33
34
35
36
 
class Solution {
    public int solution(String[][] clothes) {
        int answer = 0;
        
        //의상 이름, 의상 종류 -> 같은 종류끼리는 중복되지 않도록 한다. 
        //의상 종류가 같은 것들끼리 분류한다??
        HashMap<String, Integer> hash = new HashMap<String, Integer>();
        
        answer = 1
 
        for (String[] s : clothes) {
            if (!hash.containsKey(s[1])) {
                //해당 의상 종류를 키로 갖고 있지 않는 경우 -> 새로 생성해줌 
                hash.put(s[1], 1);
            }
            else {
                //기존 의상 개수에 추가 
                hash.put(s[1], hash.get(s[1]) +1 );
            }
        }
        
        for (Integer value : hash.values()) {
            System.out.println(value);
            answer *= (value + 1);
        }
        
        return answer-1;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter