[백준 11431] Mr. Gorbachev, Tear Down This Wall! (C#, C++) - soo:bak
작성일 :
문제 링크
11431번 - Mr. Gorbachev, Tear Down This Wall!
설명
여러 점으로 표현된 벽이 주어질 때, 벽 전체 길이를 구한 뒤 주어진 인원으로 철거하는 데 걸리는 시간을 구하는 문제입니다.
접근법
벽은 가로 또는 세로 선분으로만 이루어져 있으므로, 연속한 두 점 사이의 길이는 |x1 - x2| + |y1 - y2|로 구할 수 있습니다.
모든 선분 길이를 더하면 벽 전체 길이가 됩니다. 여기에 한 사람이 1미터를 철거하는 데 걸리는 시간 s를 곱하면 전체 작업량이 나오고, 이를 사람 수 p로 나눈 값을 올림하면 필요한 시간이 됩니다.
출력은 데이터셋 번호와 정답 사이에 빈 줄까지 포함해 문제 형식에 맞춰 그대로 출력하면 됩니다.
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
36
37
using System;
class Program {
static void Main() {
int t = int.Parse(Console.ReadLine()!);
for (int tc = 1; tc <= t; tc++) {
string[] first = Console.ReadLine()!.Split();
int n = int.Parse(first[0]);
int s = int.Parse(first[1]);
int p = int.Parse(first[2]);
string[] point = Console.ReadLine()!.Split();
int prevX = int.Parse(point[0]);
int prevY = int.Parse(point[1]);
long length = 0;
for (int i = 0; i < n; i++) {
point = Console.ReadLine()!.Split();
int x = int.Parse(point[0]);
int y = int.Parse(point[1]);
length += Math.Abs(x - prevX) + Math.Abs(y - prevY);
prevX = x;
prevY = y;
}
long totalWork = length * s;
long answer = (totalWork + p - 1) / p;
Console.WriteLine($"Data Set {tc}:");
Console.WriteLine(answer);
Console.WriteLine();
}
}
}
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 main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
for (int tc = 1; tc <= t; tc++) {
int n, s, p;
cin >> n >> s >> p;
int prevX, prevY;
cin >> prevX >> prevY;
long long length = 0;
for (int i = 0; i < n; i++) {
int x, y;
cin >> x >> y;
length += abs(x - prevX) + abs(y - prevY);
prevX = x;
prevY = y;
}
long long totalWork = length * s;
long long answer = (totalWork + p - 1) / p;
cout << "Data Set " << tc << ":\n";
cout << answer << "\n\n";
}
return 0;
}