728x90
반응형
문제 설명
1. yellow_hat
2. blue_sunglasses
3. green_turban
4. yellow_hat + blue_sunglasses
5. green_turban + blue_sunglasses
각 입을 수 있는 의상들을 종류별로 입는 경우의 수를 모두 계산하고 최종적으로 몇개의 조합으로 옷을 입을 수 있는지 계산하는 문제이다.
우선 각 의상의 종류별로 몇개의 종류가 있는지 넣어줄 딕셔너리를 선언하고 string 배열에서 받아온 옷의 갯수 만큼 계산하는 for문을 돌려준다.
이후에는 각 Dictionary 의 key값 만큼 곱해주면 간단하게 경우의 수가 나온다.
최소한 하나의 옷은 입는다는 전제조건이 있었기 때문에 최종적으로 나온 answer에 -1을 해주면 해결 된다.
해당 코드
using System;
using System.Collections.Generic;
public class Solution
{
public int solution(string[,] clothes)
{
// 의상 종류별로 몇 개의 의상이 있는지 저장할 딕셔너리
Dictionary<string, int> clothesDict = new Dictionary<string, int>();
// 각 의상의 종류를 세어준다.
// clothes 배열의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있다.
for (int i = 0; i < clothes.GetLength(0); i++)
{
string category = clothes[i, 1]; // 의상의 종류를 가져옴
// 만약 해당 종류가 이미 딕셔너리에 있다면, 그 값을 1 증가시킴
if (clothesDict.ContainsKey(category))
{
clothesDict[category]++;
}
// 딕셔너리에 해당 종류가 없다면, 새로운 종류로 추가하고 값을 1로 설정
else
{
clothesDict[category] = 1;
}
}
// 가능한 모든 조합의 수를 계산
int answer = 1; // 곱셈을 위한 초기값을 1로 설정 (곱셈의 항등원)
// 딕셔너리의 키(의상 종류)를 리스트로 변환하여 for 루프로 순회
List<string> keys = new List<string>(clothesDict.Keys);
// 각 의상 종류별로 (해당 종류의 의상 수 + 1)을 계산하여 곱함
// +1을 하는 이유는 해당 종류의 의상을 입지 않는 경우를 포함하기 위해서
for (int i = 0; i < keys.Count; i++) {
string key = keys[i];
answer *= (clothesDict[key] + 1); // 해당 종류의 의상 수 + 1 (입지 않는 경우 포함)
}
// 아무것도 입지 않은 경우(즉, 모든 의상을 입지 않은 경우)는 제외해야 하므로 -1을 해줌
return answer - 1;
}
}
이
728x90
반응형
'코딩테스트' 카테고리의 다른 글
C# [프로그래머스] Lv.3 입국심사 (0) | 2024.09.05 |
---|---|
C# [프로그래머스] Lv.2 JadenCase 문자열 만들기 (0) | 2024.09.05 |
C# [프로그래머스] Lv.2 두 큐 합 같게 만들기 (0) | 2024.08.09 |
C# [프로그래머스] Lv.2 택배 상자 (0) | 2024.08.06 |
C# [프로그래머스] Lv.2 귤 고르기 (0) | 2024.08.02 |