[백준 22123] Экзамен (C#, C++) - soo:bak
작성일 :
문제 링크
설명
시험 시작 시각과 종료 시각, 코드 작성 시간이 주어질 때 합격 여부를 판별하는 문제입니다.
접근법
시험 시간 내에 제출하면 Perfect, 종료 후 1시간 이내면 Test, 그 외에는 Fail입니다.
시작 시각과 종료 시각을 초 단위로 변환합니다. 종료가 시작보다 작으면 다음 날로 넘어간 것이므로 하루 전체 초를 더해 차이를 구합니다. 시험 지속 시간이 0이면 정확히 24시간을 의미합니다.
작성 시간을 분에서 초로 변환한 뒤, 지속 시간과 비교하여 결과를 출력합니다.
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
using System;
class Program {
static int ToSec(string t) {
var p = t.Split(':');
return int.Parse(p[0]) * 3600 + int.Parse(p[1]) * 60 + int.Parse(p[2]);
}
static void Main() {
var n = int.Parse(Console.ReadLine()!);
for (var i = 0; i < n; i++) {
var parts = Console.ReadLine()!.Split();
var s = ToSec(parts[0]);
var f = ToSec(parts[1]);
var k = int.Parse(parts[2]) * 60;
var dur = (f - s + 86400) % 86400;
if (dur == 0) dur = 86400;
if (k <= dur) Console.WriteLine("Perfect");
else if (k <= dur + 3600) Console.WriteLine("Test");
else Console.WriteLine("Fail");
}
}
}
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
#include <bits/stdc++.h>
using namespace std;
int toSec(const string& t) {
int h = stoi(t.substr(0, 2));
int m = stoi(t.substr(3, 2));
int sec = stoi(t.substr(6, 2));
return h * 3600 + m * 60 + sec;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
for (int i = 0; i < n; i++) {
string sStr, fStr;
int kMin;
cin >> sStr >> fStr >> kMin;
int s = toSec(sStr);
int f = toSec(fStr);
int k = kMin * 60;
int dur = (f - s + 86400) % 86400;
if (dur == 0) dur = 86400;
if (k <= dur) cout << "Perfect\n";
else if (k <= dur + 3600) cout << "Test\n";
else cout << "Fail\n";
}
return 0;
}