본문 바로가기

백준/C++

[Baekjoon/C++] 주사위 1233번

Baekjoon Online Judge

문제로 이동

 

문제

지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다. 총 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과 같은 합들을 얻을 수 있다. 이 때, 가장 많이 발생하는 합을 구하는 것이다.

 

입력

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

 

출력

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

 


예제 입력 예제 출력
3 2 3 5

풀이

#include <iostream>
using namespace std;

int main() {
    int sum[81] = { 0 };

    int S1, S2, S3; // 주사위의 면
    cin >> S1 >> S2 >> S3;

    int lot = 0; // 가장 많이 발생한 합의 횟수
    int indx = 80; // 가장 많이 발생하는 합

    for (int i = 1; i <= S1; i++) {
        for (int j = 1; j <= S2; j++) {
            for (int k = 1; k <= S3; k++) {
                int n = i + j + k;
                sum[n]++;

                // 가장 많이 발생하는 합 찾기
                if (sum[n] > lot) {
                    lot = sum[n];
                    indx = n;
                } 

                // 가장 많이 발생하는 합이 여러개라면 가장 합이 작은 것을 선택
                if (sum[n] == sum[indx] && n < indx)
                    indx = n;
            }
        }
    }

    // 출력
    cout << indx;

    return 0;
}

S1와 S2는 최대 20, S3은 최대 40까지 이므로 가장 큰 주사위 면의 합은 80이다. 이 수를 이용해서 sum[81]을 선언했다.

for문을 3개를 겹쳐서 주사위 면의 합 n을 구했으며, 이 값에 해당하는 sum[n]의 값을 1씩 증가시켰다.

만약 sum[n]이 가장 많이 발생한 합이라면 lot과 indx의 값을 변경했다. 

또한 문제의 조건에 가장 많이 발생하는 합이 여러개라면 가장 합이 작은 것을 선택한다는 부분이 있으므로 if (sum[n] == sum[indx] && n < indx)을 추가하였다.

'백준 > C++' 카테고리의 다른 글

[Baekjoon/C++] 1252번 이진수 덧셈  (0) 2022.05.06
[Baekjoon/C++] 성 지키기 1236번  (0) 2022.04.29
[Baekjoon/C++] 이상한 곱셈 1225번  (0) 2022.04.29
[Baekjoon/C++] 8진수 2진수 1212번  (0) 2022.04.29
[Baekjoon/C++] 운동 1173번  (0) 2022.04.29