티스토리 뷰
문제 링크 : 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 값 비교를 통해 맞는 값을 출력한다.