[백준 17247] 택시 거리 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
격자에 두 개의 1이 주어질 때, 두 위치 사이의 택시 거리를 구하는 문제입니다.
접근법
격자를 순회하면서 1이 있는 두 좌표를 찾습니다.
두 점의 행 차이 절댓값과 열 차이 절댓값을 더하면 택시 거리가 됩니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
class Program {
static void Main() {
var nm = Console.ReadLine()!.Split();
var n = int.Parse(nm[0]);
var m = int.Parse(nm[1]);
var pts = new (int r, int c)[2];
var idx = 0;
for (var i = 0; i < n; i++) {
var line = Console.ReadLine()!.Split();
for (var j = 0; j < m; j++) {
if (line[j] == "1") pts[idx++] = (i, j);
}
}
var dist = Math.Abs(pts[0].r - pts[1].r) + Math.Abs(pts[0].c - pts[1].c);
Console.WriteLine(dist);
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m; cin >> n >> m;
vector<pii> pts;
pts.reserve(2);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int v; cin >> v;
if (v == 1) pts.push_back({i, j});
}
}
int dist = abs(pts[0].first - pts[1].first) + abs(pts[0].second - pts[1].second);
cout << dist << "\n";
return 0;
}