백준 문제 풀이 - 주사위 1233번

Joonyeol Sim👨‍🎓·2022년 2월 8일
0

백준문제풀이

목록 보기
86/128

📜 문제 이해하기

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

💡 문제 재정의

나오는 모든 주사위의 합에서 빈도수가 가장 큰 합을 구하라.

✏️ 계획 수립

모든 주사위를 한번씩 굴려봐서 모든 경우의 수 조합을 확인하고 가장 많이 나오는 합을 출력하면 된다.
배열은 int형으로 최대합인 80이 사이즈가 되도록 설정하고 모든 주사위를 굴려봐서 각 인덱스에 더해주면된다.

💻 계획 수행

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int dice1, dice2, dice3;
    cin >> dice1 >> dice2 >> dice3;

    int sum[80] = {0,};

    for (int i=1; i<=dice1; i++)
        for (int j=1; j<=dice2; j++)
            for (int k=1; k<=dice3; k++)
                sum[i+j+k] += 1;

    cout << distance(sum, std::max_element(sum, sum+80)) << "\n";
}

🤔 회고

브루트포스를 이용하면 가볍게 풀 수 있는 문제였다.
cpp에서 distance와 max_element를 사용해볼 수 있는 기회였다.

profile
https://github.com/joonyeolsim

0개의 댓글