작성일 :

문제 링크

16585번 - Tour de BINUS

설명

일렬로 배열된 교실 1번부터 N번까지 있고, 각 교실의 학생 수가 주어집니다. 학생 수가 0이면 빈 교실입니다.

Ayu는 시작 교실에서 한 방향으로 끝까지 이동하며 지나가는 교실의 학생 수 합을 구합니다. Budi는 같은 방식으로 빈 교실 개수를 셉니다. 시작 교실도 포함합니다.


접근법

먼저, N과 각 교실의 학생 수 배열을 읽습니다. 그 다음 Ayu의 시작 교실과 방향, Budi의 시작 교실과 방향을 읽습니다.

다음으로, 방향에 따라 이동 구간을 결정합니다. 오른쪽이면 시작 교실부터 N번까지, 왼쪽이면 시작 교실부터 1번까지입니다.

이후, Ayu는 해당 구간의 학생 수를 모두 더하고, Budi는 해당 구간에서 학생 수가 0인 교실 개수를 셉니다. 결과를 공백으로 구분해 출력합니다.



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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var n = int.Parse(Console.ReadLine()!);
      var nums = Console.ReadLine()!.Split();
      var a = new int[n + 1];
      for (var i = 1; i <= n; i++)
        a[i] = int.Parse(nums[i - 1]);

      var p1 = Console.ReadLine()!.Split();
      var x1 = int.Parse(p1[0]);
      var d1 = p1[1];

      var p2 = Console.ReadLine()!.Split();
      var x2 = int.Parse(p2[0]);
      var d2 = p2[1];

      var ayu = 0;
      var budi = 0;

      if (d1 == "right") {
        for (var i = x1; i <= n; i++)
          ayu += a[i];
      } else {
        for (var i = x1; i >= 1; i--)
          ayu += a[i];
      }

      if (d2 == "right") {
        for (var i = x2; i <= n; i++) {
          if (a[i] == 0)
            budi++;
        }
      } else {
        for (var i = x2; i >= 1; i--) {
          if (a[i] == 0)
            budi++;
        }
      }

      Console.WriteLine($"{ayu} {budi}");
    }
  }
}

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <bits/stdc++.h>
using namespace std;

typedef vector<int> vi;

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

  int n; cin >> n;
  vi a(n + 1);
  for (int i = 1; i <= n; i++)
    cin >> a[i];

  int x1, x2; string d1, d2; cin >> x1 >> d1; cin >> x2 >> d2;

  int ayu = 0, budi = 0;

  if (d1 == "right") {
    for (int i = x1; i <= n; i++)
      ayu += a[i];
  } else {
    for (int i = x1; i >= 1; i--)
      ayu += a[i];
  }

  if (d2 == "right") {
    for (int i = x2; i <= n; i++) {
      if (a[i] == 0)
        budi++;
    }
  } else {
    for (int i = x2; i >= 1; i--) {
      if (a[i] == 0)
        budi++;
    }
  }

  cout << ayu << " " << budi << "\n";

  return 0;
}