작성일 :

문제 링크

17247번 - 택시 거리

설명

격자에 두 개의 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;
}