[백준 8661] Stopki (C#, C++) - soo:bak
작성일 :
문제 링크
설명
거리 x만큼 떨어진 두 사람이 번갈아 전진합니다. 코직은 한 번에 k, 아드리안은 a만큼 전진합니다.
코직이 먼저 움직이고, 상대의 발을 밟으면 승리합니다. 승자가 코직이면 1, 아드리안이면 0을 출력하는 문제입니다.
접근법
먼저, 한 사이클은 k+a만큼 거리가 줄어듭니다. 거리 x를 k+a로 나눈 나머지만 보면 마지막 사이클에서 승부가 결정됩니다.
다음으로, 나머지가 k보다 작으면 코직이 그 턴에 상대를 밟아 이깁니다. 나머지가 k 이상이면 코직이 k만큼 전진해도 도달하지 못하고, 아드리안이 이깁니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
namespace Solution {
class Program {
static void Main(string[] args) {
var parts = Console.ReadLine()!.Split();
var x = int.Parse(parts[0]);
var k = int.Parse(parts[1]);
var a = int.Parse(parts[2]);
var rem = x % (k + a);
var winner = (k > rem) ? 1 : 0;
Console.WriteLine(winner);
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int x, k, a; cin >> x >> k >> a;
int rem = x % (k + a);
int winner = (k > rem) ? 1 : 0;
cout << winner << "\n";
return 0;
}