본문 바로가기

Algorithm

백준 9375 패션왕 신해빈 Java

단계별로 풀어보기 -> 수학 3에서 만난 문제인 패션왕 신해빈 문제이다.

 

문제의 내용은

해빈이가 가진 의상의 이름과 종류가 주어지고

해빈이는 한번 입었던 옷의 조합은 다시 입지 않을 때

해빈이가 알몸이 아닌 상태로 옷을 입을 수 있는 경우의 수를 출력하면 된다.

 

문제에 의상의 이름과 종류가 주어지는데

의상의 이름은 중복되는 것이 없다고 문제에서 주어졌기 때문에

의상의 이름에 신경을 쓸 필요는 없다.

 

이 문제에선 경우의 수를 구하는 공식이 있는데

(옷의 종류별 수 +1) * (옷의 종류별 수 +1) *...(옷의 종류별 수 +1) -1이다.

 

마지막에 -1을 하는 이유는 알몸이 아닌 상태를 제외하기 때문이다.

옷의 종류별 수를 구하기 위해 자료구조로 Map을 사용하여 종류별로 저장하고

종류별 수를 알아내기 위해 values메소드를 사용하였다.

 

이 공식을 다른 문제에도 응용할 수 있도록 잘 외워놔야겠다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int tc = Integer.parseInt(reader.readLine());
        StringBuilder sb = new StringBuilder();
        while(tc-- > 0) {
            int n = Integer.parseInt(reader.readLine());
            Map<String, Integer> map = new HashMap<>();
            for(int i=0; i<n; i++) {
                String [] s = reader.readLine().split(" ");
                if(map.containsKey(s[1])) {
                    map.replace(s[1], map.get(s[1]), map.get(s[1])+1);
                } else {
                    map.put(s[1], 1);
                }
            }
            int ans = 1;
            for(int v : map.values()) {
                ans *= v+1;
            }
            sb.append(ans-1+"\n");
        }
        System.out.print(sb.toString());
    }
 

'Algorithm' 카테고리의 다른 글

백준 1005 ACM Craft Java  (0) 2019.08.13
백준 2252 줄 세우기 Java  (0) 2019.08.12
백준 11279 최대 힙 Java  (0) 2019.08.08
백준 14888 연산자 끼워넣기 Java  (0) 2019.08.07
백준 2606 바이러스 Java  (0) 2019.08.07