[백준 13221] Manhattan (C#, C++) - soo:bak
작성일 :
문제 링크
설명
택시 기하학의 맨해튼 거리와 관련된 문제입니다.
뉴욕 맨해튼 섬의 격자처럼 교차하는 거리들에서, 택시들이 북쪽, 남쪽, 동쪽, 서쪽 방향으로만 이동할 수 있다고 가정했을 때,
한 교차점에서 다른 교차점까지의 거리를 Manhatten Distance
라고 합니다.
각 택시들의 위치가 입력으로 주어질 때, 승객과 택시 사이의 맨해튼 거리를 계산하여 승객과 거리가 가장 가까운 택시의 위치를 출력합니다.
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
namespace Solution {
class Program {
public struct Taxi {
public int X, Y, Dist;
}
static void Main(string[] args) {
var input = Console.ReadLine()!.Split(' ');
var x = int.Parse(input[0]);
var y = int.Parse(input[1]);
var n = int.Parse(Console.ReadLine()!);
var taxis = new Taxi[n];
for (int i = 0; i < n; i++) {
var coords = Console.ReadLine()!.Split(' ').Select(int.Parse).ToArray();
taxis[i] = new Taxi {
X = coords[0],
Y = coords[1],
Dist = Math.Abs(x - coords[0]) + Math.Abs(y - coords[1])
};
}
taxis = taxis.OrderBy(t => t.Dist).ToArray();
Console.WriteLine($"{taxis[0].X} {taxis[0].Y}");
}
}
}
[ 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
#include <bits/stdc++.h>
using namespace std;
struct Taxi {
int x, y, dist;
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int x, y, n; cin >> x >> y >> n;
vector<Taxi> taxis(n);
for (int i = 0; i < n; i++) {
cin >> taxis[i].x >> taxis[i].y;
taxis[i].dist = abs(x - taxis[i].x) + abs(y - taxis[i].y);
}
sort(taxis.begin(), taxis.end(), [](const Taxi& a, const Taxi& b) { return a.dist < b.dist;});
cout << taxis[0].x << " " << taxis[0].y << "\n";
return 0;
}