[백준 12840] 창용이의 시계 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
시각을 앞뒤로 이동시킨 뒤 쿼리 시점의 시각을 출력하는 문제입니다.
접근법
시각을 초 단위로 변환해 저장합니다.
쿼리마다 초를 더하거나 빼고, 하루 총 초수 86400으로 나눈 나머지를 취합니다.
뺄셈 결과가 음수면 86400을 더해 보정합니다.
조회 시에는 초를 다시 시, 분, 초로 나눠 출력합니다.
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
using System;
class Program {
static void Main() {
var daySec = 86400;
var line = Console.ReadLine()!.Split();
var h = int.Parse(line[0]);
var m = int.Parse(line[1]);
var s = int.Parse(line[2]);
var q = int.Parse(Console.ReadLine()!);
var time = h * 3600 + m * 60 + s;
for (var i = 0; i < q; i++) {
var cmd = Console.ReadLine()!.Split();
var t = int.Parse(cmd[0]);
if (t == 1) {
var c = int.Parse(cmd[1]);
time = (time + c) % daySec;
} else if (t == 2) {
var c = int.Parse(cmd[1]);
time = (time - c) % daySec;
if (time < 0) time += daySec;
} else {
var oh = time / 3600;
var om = (time / 60) % 60;
var os = time % 60;
Console.WriteLine($"{oh} {om} {os}");
}
}
}
}
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int daySec = 86400;
int h, m, s;
if (!(cin >> h >> m >> s)) return 0;
int q; cin >> q;
int time = h * 3600 + m * 60 + s;
for (int i = 0; i < q; i++) {
int t; cin >> t;
if (t == 1) {
int c; cin >> c;
time = (time + c) % daySec;
} else if (t == 2) {
int c; cin >> c;
time = (time - c) % daySec;
if (time < 0) time += daySec;
} else {
int oh = time / 3600;
int om = (time / 60) % 60;
int os = time % 60;
cout << oh << " " << om << " " << os << "\n";
}
}
return 0;
}