[백준 32280] 지각생 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
학생과 선생님의 도착 시각이 주어질 때, 지각 사실이 들켜 청소를 하게 되는 학생 수를 구하는 문제입니다.
접근법
먼저 모든 시각을 분 단위로 바꿔 비교 가능하게 만듭니다.
다음으로 선생님의 도착 시각을 따로 기록합니다.
이후 학생이 정해진 등교 시간 이후에 도착했고 선생님보다 늦게 들어왔다면 청소 대상에 포함합니다.
마지막으로 해당 학생 수를 출력합니다.
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
using System;
using System.Collections.Generic;
class Program {
static int ToMinutes(string s) {
var parts = s.Split(':');
var h = int.Parse(parts[0]);
var m = int.Parse(parts[1]);
return h * 60 + m;
}
static void Main() {
var parts = Console.In.ReadToEnd().Split();
var idx = 0;
var n = int.Parse(parts[idx++]);
var students = new List<int>();
var teacher = -1;
for (var i = 0; i < n + 1; i++) {
var time = parts[idx++];
var who = parts[idx++];
var t = ToMinutes(time);
if (who == "teacher") teacher = t;
else students.Add(t);
}
var school = ToMinutes(parts[idx++]);
var cnt = 0;
foreach (var t in students) {
if (t >= school && t >= teacher) cnt++;
}
Console.WriteLine(cnt);
}
}
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
#include <bits/stdc++.h>
using namespace std;
int toMinutes(const string &s) {
int h = (s[0] - '0') * 10 + (s[1] - '0');
int m = (s[3] - '0') * 10 + (s[4] - '0');
return h * 60 + m;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
vector<int> students;
students.reserve(n);
int teacher = -1;
for (int i = 0; i < n + 1; i++) {
string time, who;
cin >> time >> who;
int t = toMinutes(time);
if (who == "teacher") teacher = t;
else students.push_back(t);
}
string schoolStr; cin >> schoolStr;
int school = toMinutes(schoolStr);
int cnt = 0;
for (int t : students) {
if (t >= school && t >= teacher) cnt++;
}
cout << cnt << "\n";
return 0;
}