[백준 29734] 집에선 안돼잉 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
집에서 과제를 할지, 독서실에서 과제를 할지 중 더 빠르게 제출할 수 있는 쪽을 판별하는 문제입니다.
과제를 수행하는 중에는 일정 시간마다 피로로 인해 수면이 필요합니다.
- 8시간마다 1회 수면이 필요하며, 수면 시간은
S
입니다. - 집에서는 곧바로 수면이 가능하지만, 독서실에서는 수면을 위해 집으로 왕복 이동 시간(
2 * T
)이 추가로 발생합니다.
즉, 과제를 수행하는 시간 외에도 수면 주기와 이동 시간을 반영해야 하며,
집과 독서실 각각에서의 전체 수행 시간을 계산하여 더 짧은 쪽을 선택합니다.
접근법
집에서 수행할 경우
- 과제를 수행하는 데 걸리는 총 시간은
N
입니다. - 8시간마다 한 번씩 수면이 필요하므로, 수면 횟수는 다음과 같이 계산됩니다:
- 따라서 집에서의 전체 소요 시간은 다음과 같습니다:
독서실에서 수행할 경우
- 독서실로 이동하는 시간
T
가 필요하며, 과제 수행 시간은M
입니다. - 수면은 집에서만 가능하므로, 수면마다 왕복 이동 시간
2*T
+ 수면 시간S
가 추가됩니다.
- 독서실에서의 전체 소요 시간은 다음과 같습니다:
최종 판단
Z
와D
중 더 작은 값을 선택합니다.- 집이 더 빠르면
"Zip"
을, 독서실이 더 빠르면"Dok"
을 출력하고,
두 번째 줄에 해당 소요 시간을 함께 출력합니다.
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
using System;
class Program {
static void Main() {
var tokens = Console.ReadLine().Split();
long n = long.Parse(tokens[0]);
long m = long.Parse(tokens[1]);
tokens = Console.ReadLine().Split();
long t = long.Parse(tokens[0]);
long s = long.Parse(tokens[1]);
long homeSleep = (n - 1) / 8;
long dormSleep = (m - 1) / 8;
long z = n + homeSleep * s;
long d = t + m + dormSleep * (2 * t + s);
if (z < d) {
Console.WriteLine("Zip");
Console.WriteLine(z);
} else {
Console.WriteLine("Dok");
Console.WriteLine(d);
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n, m, t, s; cin >> n >> m >> t >> s;
ll z = n + (n - 1) / 8 * s;
ll d = t + m + (m - 1) / 8 * (2 * t + s);
if (z < d) cout << "Zip\n" << z;
else cout << "Dok\n" << d;
return 0;
}