작성일 :

문제 링크

13871번 - Farm robot

설명

로봇 허수아비가 하루 동안 특정 충전소에 몇 번 도착했는지 계산하는 문제입니다.

로봇은 매일 1 번 충전소에서 시작하여, 주어진 명령어 시퀀스에 따라 시계 방향 이나 반시계 방향으로 다음 충전소를 향해 이동합니다.


  1. 로봇의 현재 위치를 나타내는 변수목표 충전소에 도달한 횟수 를 세는 변수를 초기합니다.

  2. 명령어 를 순회하면서 로봇의 위치를 갱신하고, 목표 충전소에 도달할 때 마다 횟수를 증가시킵니다.

  3. 이동 후 로봇의 위치가 충전소 개수를 초과하면 1 로 다시 초기화를 하고, 0 이하가 되면 충전소의 총 개수로 설정하여 순환 구조를 유지하게끔 합니다.

  4. 모든 명령어를 처리한 후 목표 충전소에 도달한 횟수를 출력합니다.


Code

[ 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
namespace Solution {
  class Program {
    static void Main(string[] args) {

      var inputs = Console.ReadLine()!.Split(' ').Select(int.Parse).ToArray();
      int n = inputs[0], s = inputs[2];

      var commands = Console.ReadLine()!.Split(' ').Select(int.Parse);

      int currentPosition = 1, count = (s == 1) ? 1 : 0;
      foreach (var command in commands) {
        currentPosition += command;

        if (currentPosition > n) currentPosition = 1;
        else if (currentPosition < 1) currentPosition += n;

        if (currentPosition == s) count++;
      }

      Console.WriteLine(count);

    }
  }
}



[ 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;

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

  int n, c, s; cin >> n >> c >> s;

  int currentPosition = 1, count = (s == 1) ? 1 : 0;

  for (int i = 0; i < c; i++) {
    int command; cin >> command;
    currentPosition += command;

    if (currentPosition > n) currentPosition = 1;
    else if (currentPosition < 1) currentPosition = n;

    if (currentPosition == s) count++;
  }

  cout << count << "\n";

  return 0;
}