[백준 BOJ] 10103번 주사위 게임 (C++/cpp)

2023. 1. 2. 17:26PS (Program Solving)/BOJ (백준)

문제 설명

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

 

10103번: 주사위 게임

첫 라운드는 상덕이의 승리이다. 따라서 창영이는 6점을 잃게 된다. 두 번째 라운드는 두 사람의 숫자가 같기 때문에, 아무도 점수를 잃지 않고 넘어간다. 세 번째 라운드의 승자는 창영이이기

www.acmicpc.net

백준 BOJ 10103번 주사위 게임 문제 사진

 

접근 방법 - 사칙연산을 이용한 기초 시뮬레이션 문제

백준의 10103번 문제는 기본적인 사칙연산을 응용한 시뮬레이션 문제이다.

해당 문제는, 두 사람이 문제에 제시된 규칙대로 게임을 진행하였을 때 둘의 최종 점수를 구하여 출력해야 하는 문제이다.

문제에 게임 규칙이 작성되어 있지만, 여기에도 간단히 작성해 보았다.

- 두 사람 모두 각각 100점으로 게임을 시작한다.
- 각 라운드마다, 두 사람이 각각 가지고 있는 주사위를 던진다.
- 주사위의 눈이 큰 사람이 승리한다.
- 승리한 사람의 주사위 눈만큼 패배한 사람의 점수가 감점된다.
(다만, 두 주사위 눈이 동일한 경우에는 어떤 감점도 일어나지 않는다.)

위 규칙만 어느 정도 이해했다면, 코드를 작성하는 데에는 큰 어려움이 없을 것으로 예상된다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 창영과 상덕의 점수를 저장할 변수 cy, sd를 각각 100으로 초기화하며 선언한다.

(두 사람 모두 첫 점수는 100으로 시작하기 때문에, 둘 모두 초기값을 100으로 설정하였다.)

 

2) 라운드의 수(n)를 입력받는다.

 

3) n의 크기만큼, 반복문을 실행하여 아래의 연산을 취한다.

- 창영과 상덕의 주사위 눈(c, s)을 각각 입력받는다

- c와 s의 값을 비교한다. 

c가 더 큰 경우에는, 상덕의 점수(sd)에서 창영의 주사위 눈(c)을 빼도록 한다.

반대로 s가 더 큰 경우에는, 창영의 점수(cy)에서 상덕의 주사위 눈(s)을 빼도록 한다.

(두 주사위 눈이 동일한 경우에는 아무도 점수를 잃지 않기 때문에, 이 경우엔 별다른 연산을 취하지 않는다.)

 

4) 모든 라운드가 끝났다면, 최종적으로 저장된 cy와 sd를 순차적으로 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 10103번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int cy = 100;
	int sd = 100;

	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int c, s;
		cin >> c >> s;

		if (c > s) {
			sd -= c;
		}
		else if (c < s) {
			cy -= s;
		}
	}

	cout << cy << endl;
	cout << sd << endl;
}

 

제출 결과

백준 BOJ 10103번 주사위 게임 문제 C++ 제출 결과

(2022.11.12 백준 10103번 문제 제출 결과)

반응형