◎ 문제
○ 출처
programmers.co.kr/learn/courses/30/lessons/42578
○ 문제 설명
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
|
○ 제한 사항
|
○ 입출력 예
○ 입출력 예 설명
예제 #1 headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다.
|
○ 작성 예시 코드
using System;
public class Solution {
public int solution(string[,] clothes) {
int answer = 0;
return answer;
}
}
◎ 나의 문제 풀이
using System.Collections.Generic;
using System.Linq;
public class Solution
{
public int solution(string[,] clothes)
{
int answer = 1;
// 각 타입별로 담을 딕셔너리
Dictionary<string, List<string>> clothes_dic = new Dictionary<string, List<string>>();
// 타입별로 딕셔너리에 저장
for(int i = 0; i < clothes.GetLength(0); i++)
{
if(clothes_dic.ContainsKey(clothes[i, 1]) == false)
{
clothes_dic[clothes[i, 1]] = new List<string>();
}
clothes_dic[clothes[i, 1]].Add(clothes[i, 0]);
}
// 딕셔너리에 저장된 데이터 갯수를 이용하여 계산
foreach (KeyValuePair<string, List<string>> cloth in clothes_dic)
{
answer *= cloth.Value.Count() + 1;
}
answer--;
return answer;
}
}
- 위 문제의 경우의 수 공식은 다음과 같다. 착장을 위한 옷의 종류가 <외투, 모자, 안경>으로 구분될 경우
( ( 외투의 갯수 + 1 ) * ( 모자의 갯수 + 1 ) * ( 안경의 갯수 + 1 ) ) - 1
모든 경우의 수를 구할 경우 각 종류의 갯수를 곱해주면 되지만,
해당 옷의 종류를 선택하지 않을 경우를 포함하기 떄문에 종류의 갯수에 +1 을 해주고
아무것도 선택하지 않는 경우는 없기 때문에 마지막에 -1을 해준다.
- 딕셔너리의 Value 타입을 List가 아닌 단순히 갯수만을 위한 카운트용으로 int를 써도 무방하다.
'프로그래밍 문제 풀이 > C#' 카테고리의 다른 글
[프로그래밍 문제 풀이] 프로그래머스 - 최솟값 만들기 (C#) (0) | 2020.09.10 |
---|---|
[프로그래밍 문제 풀이] 프로그래머스 - 다음 큰 숫자 (C#) (0) | 2020.09.10 |
[프로그래밍 문제 풀이] 프로그래머스 - 가장 큰 수 (C#) (0) | 2020.09.10 |
[프로그래밍 문제 풀이] 프로그래머스 - 스킬트리 (C#) (0) | 2020.08.12 |
[프로그래밍 문제 풀이] 프로그래머스 - 프린터 (C#) (0) | 2020.08.12 |