작성일 :

문제 링크

8661번 - Stopki

설명

거리 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;
}