[Java] Boj 9375: 패션왕 신해빈

2025. 7. 28. 20:51·PS/Solve

문제

https://www.acmicpc.net/problem/9375

 

풀이

 옷과 옷의 종류를 입력받고 같은 종류의 옷은 하나만 입을 수 있을 때, 입을 수 있는 옷의 조합 종류를 출력하는 문제이다. 문제를 보고 든 생각은 입력받은 옷들이 종류별로 몇 가지 있는지만 알면 바로 풀 수 있는 문제로 보였다. 옷이 종류별로 몇 가지 있는지 판정은 해시 맵을 이용하면 된다. 똑같은 옷이 입력으로 들어오지 않으니 단순히 한 종류의 옷이 몇 개 있는지만 알면 된다. 

 

 한 종류의 옷이 몇 개 있는지는 해시 맵을 이용해 구현 가능하니, 이제는 의상 조합 수를 따져보자. 상의 3개, 하의 4개, 모자 3개가 있을 때 조합 가능한 옷의 경우의 수는 (3 + 1) * (4 + 1) * (3 + 1) = 80가지가 될 것이다. 여기서 1을 옷의 종류마다 더해주는데, 이것은 해당 종류의 옷을 입지 않는 경우도 고려하기 때문이다. 추가로, 문제에서 아무것도 입지 않는 경우도 없다고 하였으니 이 경우의 답은 80 - 1 = 79가 될 것이다. 고등학교의 확률과 통계 공부할 때 이런 문제를 많이 봤던 것 같은데 너무 오랜만에 이런 문제를 다시 보니 많이 헷갈렸다...

 

코드

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
37
38
39
40
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int tc = Integer.parseInt(bf.readLine());
        for (int x=0; x<tc; x++) {
            int n = Integer.parseInt(bf.readLine());
            HashMap<String, Integer> map = new HashMap<>();
            HashSet<String> set = new HashSet<>();
            for (int i = 0; i<n; i++) {
                String input = bf.readLine();
                String name = input.split(" ")[0];
                String type = input.split(" ")[1];
 
                if (! map.containsKey(type)) {
                    map.put(type, 1);
                } else {
                    map.put(type, map.get(type) + 1);
                }
            }
            List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
            List<Integer> sol = new ArrayList<>();
            for (int i=0; i<list.size(); i++) {
                sol.add(list.get(i).getValue());
            }
            System.out.println(solution(sol));
        }
    }
    public static int solution(List<Integer> list) {
        int res = 1;
        for (int i = 0; i < list.size(); i++) {
            res = res * (list.get(i) + 1);
        }
        return res - 1;
    }
}
Colored by Color Scripter
cs

'PS > Solve' 카테고리의 다른 글

[Java] Boj 2108: 통계학  (2) 2025.07.25
[Java] Boj 1966: 프린터 큐  (2) 2025.07.25
[Java] Boj 1049: 기타줄  (0) 2025.07.14
[Java] Boj 1343: 폴리오미노  (0) 2025.07.14
[Java] Boj 14496: 그대, 그머가 되어  (2) 2025.07.11
'PS/Solve' 카테고리의 다른 글
  • [Java] Boj 2108: 통계학
  • [Java] Boj 1966: 프린터 큐
  • [Java] Boj 1049: 기타줄
  • [Java] Boj 1343: 폴리오미노
hyeon0117
hyeon0117
컴공으로 살아남기
  • hyeon0117
    컴공 생활기
    hyeon0117
  • 전체
    오늘
    어제
    • 분류 전체보기 (66) N
      • Algorithm (2)
      • PS (22) N
        • Solve (22) N
      • CS (42) N
        • 객체지향설계 & 패턴 (12)
        • COLMAP (2)
        • 머신러닝 (1)
        • 프로그래밍 언어론 (19)
        • 형식언어 (7) N
        • 운영체제 (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CS
    정규 언어
    자료형
    정규 문법
    Formal Language
    선택 정렬
    객체지향설계
    컴파일러
    촘스키 계층
    의미론
    boj 1343
    유한 오토마타
    백준
    그리디 알고리즘
    디자인 패턴
    BOJ
    형식언어론
    디자인패턴
    PLT
    객체지향언어
    java
    형식언어
    알고리즘
    최단 경로
    자료구조
    함수
    프로그래밍 언어론
    PS
    객체지향
    구현
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hyeon0117
[Java] Boj 9375: 패션왕 신해빈
상단으로

티스토리툴바