백준 9375번 패션왕 신해빈 (C#)

김보근·2025년 8월 8일

백준

목록 보기
58/62

백준 9375번 패션왕 신해빈 (C#)

문제

옷이 이름과 종류로 주어진다.
같은 종류의 옷은 동시에 입을 수 없고, 하루에 최소 한 가지 이상 입어야 한다.
가능한 모든 옷 조합의 수를 구하는 문제.


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

접근 방법

이 문제의 핵심은 종류별 옷 개수를 세고,
각 종류마다 입는 경우 + 안 입는 경우를 계산해서
모든 종류를 곱한 뒤, 아무것도 안 입는 경우를 빼는 것이다.

풀이 과정

  • Dictionary<string, int>를 사용해 종류별 개수를 저장.

  • 입력을 받을 때, 같은 종류가 이미 있으면 ++, 없으면 = 1.

  • 모든 종류를 순회하면서 (count + 1)을 곱함.

  • 마지막에 -1 해서 아무것도 안 입는 경우 제거.

예시

3
hat headgear
sunglasses eyewear
turban headgear
headgear: 2
eyewear: 1
(2 + 1) × (1 + 1) = 3 × 2 = 6
6 - 1 = 5

작성한 코드

using System;
using System.Collections.Generic;

namespace backjoon
{
    internal class Program
    {
        static void Main()
        {
            int t = int.Parse(Console.ReadLine()); // 테스트 케이스 개수

            for (int i = 0; i < t; i++)
            {
                int n = int.Parse(Console.ReadLine()); // 옷의 개수
                Dictionary<string, int> clothes = new Dictionary<string, int>();

                for (int j = 0; j < n; j++)
                {
                    string[] input = Console.ReadLine().Split();
                    string type = input[1];

                    if (clothes.ContainsKey(type))
                        clothes[type]++;
                    else
                        clothes[type] = 1;
                }

                int result = 1;

                foreach (var count in clothes.Values)
                {
                    // 안 입는 경우 + 입는 경우
                    result *= (count + 1);
                }

                Console.WriteLine(result - 1); // 아무것도 안 입는 경우 제거
            }
        }
    }
}

배운 점

Dictionary<string, int>로 종류별 개수를 관리하면 편리하다.

(count + 1)은 안 입는 경우를 포함시키기 위함이다.

마지막에 -1은 모든 종류를 안 입는 경우를 제외하기 위함이다.

clothes.Values를 쓰면 Dictionary의 값(Value)만 순회할 수 있다.

profile
게임개발자꿈나무

0개의 댓글