새소식

💻 Programming (프로그래밍)/C++ | 백준

[C++][백준] - 주사위 네개 (2484번)

  • -
https://www.acmicpc.net/problem/2484
 

2484번: 주사위 네개

첫째 줄에는 참여하는 사람 수 N이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 4개의 눈이 빈칸을 사이에 두고 각각 주어진다.

www.acmicpc.net

🔔 문제 : 

1<= N <= 1000 인 N명이 주사위 게임에 참가합니다.

 

1~6까지의 숫자가 있는 정육면체 주사위를 통해

 

같은 눈이 4개가 나오면 50,000원+(같은 눈)×5,000원의 상금을 받게 된다. 
같은 눈이 3개만 나오면 10,000원+(3개가 나온 눈)×1,000원의 상금을 받게 된다. 
같은 눈이 2개씩 두 쌍이 나오는 경우에는 2,000원+(2개가 나온 눈)×500원+(또 다른 2개가 나온 눈)×500원의 상금을 받게 된다.
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.  

이라는 조건으로 진행하는 게임이 있습니다.

 

출력값으로 가장 많은 상금을 받은 사람의 상금을 출력해야하는 문제입니다.

 


🔔 Kick Point :

 

조건 확인 시, 같은눈 2개씩 인 경우에는 조건 속 조건을 들어가야하는 것만 구현을 하면 잘 될것 같습니다.

 

또한 int arr[7]을 통해

주사위가 1이 나온경우 arr[1]++

주사위가 2이 나온경우 arr[2]++ 식으로 이어가면서, 각 주사위가 나온 횟수를 저장해주었습니다.


🔔 Code :

#include <iostream>
using namespace std;
int main() 
{
	int n, total =0;
	cin >> n;
	while (n--) {
		int arr[7] = { 0, };
		
		// 1. 입력부
		for (int i = 0; i < 4; i++) {
			int tmp;
			cin >> tmp;
			arr[tmp]++;
		}

		// 2. 조건부
		for (int j = 6; j > 0; j--) {
			if (arr[j] == 4) {
				total = total < 50000 + 5000 * j ? 50000 + 5000 * j : total;
				break;
			}
			else if (arr[j] == 3) {
				total = total < 10000 + 1000 * j ? 10000 + 1000 * j : total;
				break;
			}

			else if (arr[j] == 2) {

				for (int k = j - 1; k > 0; k--) {
					if (arr[k] == 2) {
						total = total < 2000 + j * 500 + k * 500 ? 2000 + j * 500 + k * 500 : total;
						break;
					}
					else {
						total = total < 1000 + 100 * j ? 1000 + 100 * j : total;
					}
				}
				break;
			}

			else if(arr[j] == 1) {
				total = total < 100 * j ? 100 * j : total;
			}
		}
	}

	cout << total;

}

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.