주녘공부일지

[프로그래머스 C#] Lv.2 의상 본문

Programmers - C#/CodingTest Lv.2

[프로그래머스 C#] Lv.2 의상

주녘 2023. 12. 11. 15:46
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 정답코드 및 핵심 아이디어, 유의사항

주어진 의상의 종류별 개수를 구하여 이를 이용해 의상 종류별 개수에 따른 수식을 적용하면 되는 문제

 

1) 의상 종류별 개수 구하기

- 의상의 종류를 키 값으로 Dctionary에 담아서 개수를 카운트

 

2) 수식

ex. 의상 종류 1가지 = a

ex. 의상 종류 2가지 = a + b + ab

ex. 의상 종류 3가지 = a + b + c + ab + bc + ac + abc

... 이런식으로 진행되는데, 이는 이런 방식으로 변경할 수 있음

 -> (a + 1)(b + 1) = a + b + ab + 1

 

( 각 수식 뒤에 +1 -1을 붙여 곱셈식으로 변환 )

의상 종류 1가지 = (a + 1) - 1

의상 종류 2가지 = (a + 1)(b + 1) - 1

의상 종류 3가지 = (a + 1)(b + 1)(c + 1) - 1

즉, (1번째 의상의 개수 + 1) ... (n번째 의상의 개수 + 1) - 1

 

주석 참조

    using System;
    using System.Collections.Generic;

    public class Solution
    {
        public int solution(string[,] clothes)
        {
            int answer = 1;
            var dict = new Dictionary<string, int>();

            // 같은 의상종류의 개수를 딕셔너리에 담음
            for (int i = 0; i < clothes.GetLength(0); i++)
            {
                if (dict.ContainsKey(clothes[i, 1]))
                    dict[clothes[i, 1]]++;
                else
                    dict.Add(clothes[i, 1], 1);
            }

            // 딕셔너리에 담긴 값 + 1을 다 곱함
            foreach (int num in dict.Values)
                answer *= num + 1;

            return answer - 1;
        }
    }
728x90