[백준 21197] Stopwatch (C#, C++) - soo:bak
작성일 :
문제 링크
설명
스톱워치는 처음에 멈춰 있으며 버튼을 누를 때마다 동작/정지가 토글됩니다. 버튼이 눌린 시각 목록이 주어질 때, 모든 입력 이후 스톱워치가 멈춰 있으면 누적 시간을, 아직 켜져 있으면 “still running”을 출력하는 문제입니다.
접근법
스톱워치는 버튼을 누를 때마다 동작과 정지가 번갈아 바뀝니다. 버튼 입력 횟수가 홀수라면 마지막에 시작된 후 정지되지 않은 상태이므로 누적 시간을 알 수 없습니다.
짝수인 경우에는 시작-정지가 짝을 이루므로, 연속한 두 시각씩 묶어 종료 시각에서 시작 시각을 빼면 각 구간의 동작 시간이 됩니다. 이를 모두 합하면 총 누적 시간을 구할 수 있습니다.
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 n = int.Parse(Console.ReadLine()!);
var times = new int[n];
for (var i = 0; i < n; i++)
times[i] = int.Parse(Console.ReadLine()!);
if ((n & 1) == 1) {
Console.WriteLine("still running");
return;
}
var sum = 0;
for (var i = 0; i < n; i += 2)
sum += times[i + 1] - times[i];
Console.WriteLine(sum);
}
}
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
#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 t(n);
for (int i = 0; i < n; i++)
cin >> t[i];
if (n % 2 == 1) {
cout << "still running\n";
return 0;
}
int sum = 0;
for (int i = 0; i < n; i += 2)
sum += t[i + 1] - t[i];
cout << sum << "\n";
return 0;
}