복대가리의 개발

[C#] 백준 (알고리즘)/브론즈 문제

[백준 - C#] 1233 주사위

복대가리 2022. 7. 12. 00:39
728x90

문제링크

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

 

1233번: 주사위

지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다. 총 3개의 주사위가 있다. 그리고 이 주사위는 각각 S1(2 ≤ S1 ≤ 20), S2(2 ≤ S2

www.acmicpc.net

문제

지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다.
총 3개의 주사위가 있다. 그리고 이 주사위는 각각 S1(2 ≤ S1 ≤ 20), S2(2 ≤ S2 ≤ 20), S3(2 ≤ S3 ≤ 40)개의 면이 있다.
(실제로는 주사위가 6개의 면이 있는 것이 정상이지만 특별한 주사위라 생각하자.)
문제는 세 개의 주사위를 동시에 던졌을 때 가장 높은 빈도로 나오는 세 주사위의 합을 구하는 것이다.
예를 들어, S1 = 3, S2 = 2, S3 = 3으로 주어질 때, 주사위1은 S1(3)개의 면이 있으므로 1, 2, 3의 눈을 가지고, 주사위2는 S2(2)개의 면이 있으므로 1, 2의 눈을 가지며, 주사위3은 S3(3)개의 면이 있으므로 1, 2, 3의 눈을 가진다.
이 때, 이 3개의 주사위를 던져서 눈의 합을 구하면, (1, 1, 1) = 3, (1, 1, 2) = 4, (1, 1, 3) = 5, ... , (3, 2, 1) = 6, (3, 2, 2) = 7, (3, 2, 3) = 8과 같은 합들을 얻을 수 있다. 이 때, 가장 많이 발생하는 합을 구하는 것이다.

조건

시간제한 : 2초
메모리 제한 : 128 MB

입력

입력 파일의 첫째 줄에 정수 S1, S2, S3가 주어진다.

출력

 

출력 파일의 첫째 줄에 가장 높은 빈도로 나오는 세 주사위 합을 구하는 것이다.
답이 여러개라면 가장 합이 작은 것을 출력한다.

 

문제풀이

브루트포스 알고리즘 문제로 주사위 3개의 모든 눈의 합을 카운팅 한 다음

가장 높은 빈도수를 구하기 위해 max값을 반복문에서 갱신 하였습니다.

 

단, 여러개라면 합이 가장 작은거 이지만 count는 오름차순으로 되어있기 때문에

같은 max 값 중에서도 제일 작은 합이 선택이 됩니다.

 

C# 코드

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
static void Main(string[] args)
{
    StreamWriter writer = new StreamWriter(Console.OpenStandardOutput());
    StreamReader reader = new StreamReader(Console.OpenStandardInput());
 
    string[] input = reader.ReadLine().Split();
    int s1 = int.Parse(input[0]);
    int s2 = int.Parse(input[1]);
    int s3 = int.Parse(input[2]);
 
    int[] count = new int[s1 + s2 + s3 + 1];
 
    for (int i = 1; i <= s1; i++)
    {
        for (int j = 1; j <= s2; j++)
        {
            for (int z = 1; z <= s3; z++)
                count[i + j + z]++// 주사위의 모든 눈의 합을 카운팅
        }
    }
 
    int max = 0, result = 0;
    for (int i = 1; i < count.Length; i++)
    {
        // 가장 높은 빈도수를 구함 (단, 여러개라면 합이 가장 작은거)
        // 오름차순이라 처음으로 구해진 max값이 제일 작습니다.
        if (max < count[i])
        {
            max = count[i];
            result = i;
        }
 
    }
 
    writer.WriteLine(result);
 
    writer.Close();
    reader.Close();
}
cs
728x90