티스토리 뷰

카테고리 없음

[백준 10837번] 동전 게임 (C++)

게임개발기원 2025. 6. 28. 22:03

문제 링크 : https://www.acmicpc.net/problem/10837

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int K, C;
    cin >> K >> C;
    for(int i=0; i<C; i++)
    {
        int M, N; 
        cin >> M >> N;
        if(M==N) 
        {
            cout << 1 << '\n';
            continue;
        }

        int gap = abs(M - N); //점수 차이
        int remain = K - max(M, N); //남은 라운드
        
        if(M > N) //동수가 한 번 더 던지기 가능 [2점차까지 따라붙기 가능]
        {
            cout << (gap-remain <= 2 ? 1 : 0) << '\n';
        }
        else //영희가 한 번 더 던지기 가능 [1점차까지 따라붙기 가능]
        {
            cout << (gap-remain <= 1 ? 1 : 0) << '\n';
        }
    }

    return 0;
}

 

기본적으로 영희와 동수의 점수가 동일하다면 게임 규칙상 끝까지 진행이 가능하다.

이런 경우 해당 점수 또한 가능하다는 의미이기에 바로 1을 출력한다.

 

이제 체크해야 할 것은 규칙 3에 따라 점수 값이 다른 경우이다.

만약 영희의 점수가 동수보다 크다면, 순서 규칙에 따라 동수가 던질 수 있다.

현재 점수 차이와 남은 라운드를 계산하여 가능 여부를 판별한다.

 

우선 M > N의 경우 기본적으로 동수가 한 번 더 던지기가 가능하다.

남은 턴이 있다는 것은 순서 규칙에 따라 영희 턴이 남았다는 것이고, 이어서 동수 차례 또한 남았다는 것이기에 2점차까지 따라붙기가 가능하다.

 

M < N의 경우 계산에 따라 영희 턴이 남아있을 수 있다.

이 경우는 1점차까지 따라붙기가 가능하다는 것이다.

(영희턴만 남는게 아니라, 동수 턴까지 남는 경우도 있지만 이 경우 원상복귀이기에 영희 턴만 남는 경우만 판별한다.)

 

이렇게 점수 차이와 남은 라운드에 대한 계산과 M, N 값 비교를 통해 맞는 값을 출력한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함