📄문제
0부터 9까지의 숫자가 표시된 카드를 가지고 두 사람 A와 B가 게임을 한다.
A와 B에게는 각각 0에서 9까지의 숫자가 하나씩 표시된 10장의 카드뭉치가 주어진다. 두 사람은 카드를 임의의 순서로 섞은 후 숫자가 보이지 않게 일렬로 늘어놓고 게임을 시작한다. 단, 게임 도중 카드의 순서를 바꿀 수는 없다.
A와 B 각각이 늘어놓은 카드를 뒤집어서 표시된 숫자를 확인하는 것을 한 라운드라고 한다. 게임은 첫 번째 놓인 카드부터 시작하여 순서대로 10번의 라운드로 진행된다.
각 라운드에서는 공개된 숫자가 더 큰 사람이 승자가 된다. 승자에게는 승점 3점이 주어지고 패자에게는 승점이 주어지지 않는다. 만약 공개된 두 숫자가 같아서 비기게 되면, A, B 모두에게 승점 1
점이 주어진다.
10번의 라운드가 모두 진행된 후, 총 승점이 큰 사람이 게임의 승자가 된다. 만약, A와 B의 총 승점이 같은 경우에는, 제일 마지막에 이긴 사람을 게임의 승자로 정한다. 그래도 승부가 나지 않는 경우는 모든 라운드에서 비기는 경우뿐이고 이 경우에 두 사람은 비겼다고 한다.
예를 들어, 다음 표에서 3번째 줄은 각 라운드의 승자를 표시하고 있다.
표에서 D는 무승부를 나타낸다. 이 경우에 A의 총 승점은 16점이고, B는 13점이어서, A가 게임의 승자가 된다.
라운드 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
A | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 9 | 8 |
B | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
승 | A | A | A | A | B | B | B | B | D | A |
아래 표의 경우에는 A와 B의 총 승점은 13점으로 같다.
마지막으로 승부가 난 라운드는 7번째 라운드이고, 이 라운드의 승자인 B가 게임의 승자가 된다.
라운드 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
A | 9 | 1 | 7 | 2 | 6 | 3 | 0 | 4 | 8 | 5 |
B | 6 | 3 | 9 | 2 | 1 | 0 | 7 | 4 | 8 | 5 |
승 | A | B | B | D | A | A | B | D | D | D |
A와 B가 늘어놓은 카드의 숫자가 순서대로 주어질 때, 게임의 승자가 A인지 B인지, 또는 비겼는지 결정하는 프로그램을 작성하시오.
⬇️ 입력
첫 번째 줄에는 A가 늘어놓은 카드의 숫자들이 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 B가 늘어놓은 카드의 숫자들이 빈칸을 사이에 두고 순서대로 주어진다.
4 5 6 7 0 1 2 3 9 8 1 2 3 4 5 6 7 8 9 0 |
⬆️ 출력
첫 번째 줄에는 게임이 끝난 후, A와 B가 받은 총 승점을 순서대로 빈칸을 사이에 두고 출력한다. 두 번째 줄에는 이긴 사람이 A인지 B인지 결정해서, 이긴 사람을 문자 A 또는 B로 출력한다. 만약 비기는 경우에는 문자 D를 출력한다.
16 13 A |
📝 풀이
#include <iostream>
int main()
{
enum DRAW_WIN_CODE
{
DRAW,
A_WIN,
B_WIN,
};
int arr[2][10];
int a = 0, b = 0;
DRAW_WIN_CODE code = DRAW;
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 10; ++j)
scanf_s("%d", &arr[i][j]);
// 승점 계산
for (int i = 0; i < 10; ++i)
{
if (arr[0][i] == arr[1][i])
++a, ++b;
else if (arr[0][i] > arr[1][i])
{
code = A_WIN;
a += 3;
}
else
{
code = B_WIN;
b += 3;
}
}
printf("%d %d\n", a, b);
// 점수가 같은경우?
if (a == b)
{
switch (code)
{
case DRAW:
printf("D");
break;
case A_WIN:
printf("A");
break;
case B_WIN:
printf("B");
break;
}
}
else
printf("%c", a > b ? 'A' : 'B');
}
- DRAW_WIN_CODE를 통해 가장 마지막에 누가 이겼는지, 또는 한번도 승부가 나지 않아 DRAW인지 체크합니다.
- 승점을 계산한 후 점수가 같은경우, DRAW_WIN_CODE를 통해 적절하게 출력합니다.
- 승점이 다른경우 승리한 플레이어의 문자를 출력합니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] 연속 부분 증가수열 (0) | 2023.10.13 |
---|---|
[C++] 온도의 최대값 (0) | 2023.10.13 |
[C++] 가위 바위 보 (0) | 2023.10.13 |
[C++] 분노유발자 (0) | 2023.10.13 |
[C++] 층간소음 (1) | 2023.10.13 |