작성일 :

문제 링크

25904번 - 안녕 클레오파트라 세상에서 제일가는 포테이토칩

설명

n명이 원형으로 돌아가며 음높이를 높여가는 게임에서, 처음 벌칙을 받는 사람 번호를 구하는 문제입니다.

1번부터 시작해 매 차례 음높이가 1씩 증가하고, 자신의 한계를 넘으면 벌칙을 받습니다.


접근법

차례가 진행될수록 음높이는 시작값에서 1씩 증가합니다.

현재 차례의 사람 번호는 차례 횟수를 n으로 나눈 나머지로 구합니다.

음높이가 해당 사람의 한계보다 커지는 순간 그 사람이 답입니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;

class Program {
  static void Main() {
    var first = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
    var n = first[0];
    var x = first[1];
    var limit = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);

    var turn = 0;
    while (true) {
      var idx = turn % n;
      var pitch = x + turn;
      if (pitch > limit[idx]) {
        Console.WriteLine(idx + 1);
        break;
      }
      turn++;
    }
  }
}

C++

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
#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi;

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

  int n, x; cin >> n >> x;
  vi limit(n);
  for (int i = 0; i < n; i++) cin >> limit[i];

  int turn = 0;
  while (true) {
    int idx = turn % n;
    int pitch = x + turn;
    if (pitch > limit[idx]) {
      cout << idx + 1 << "\n";
      break;
    }
    ++turn;
  }

  return 0;
}