작성일 :

문제 링크

16431번 - 베시와 데이지

설명

베시는 대각선을 포함해 8방향으로 이동하므로 이동 시간은 체비쇼프 거리가 됩니다. 데이지는 상하좌우 4방향만 이동하므로 이동 시간은 맨해튼 거리입니다.

두 소가 존의 위치까지 최단 경로로 이동할 때, 누가 더 빨리 도착하는지 비교하는 문제입니다.


접근법

먼저, 베시의 이동 시간은 행 차이와 열 차이 중 큰 값입니다.

다음으로, 데이지의 이동 시간은 행 차이와 열 차이의 합입니다.

이후, 두 이동 시간을 비교해 bessie, daisy, tie 중 하나를 출력합니다.



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
using System;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var b = Console.ReadLine()!.Split();
      var d = Console.ReadLine()!.Split();
      var j = Console.ReadLine()!.Split();

      var Br = int.Parse(b[0]);
      var Bc = int.Parse(b[1]);
      var Dr = int.Parse(d[0]);
      var Dc = int.Parse(d[1]);
      var Jr = int.Parse(j[0]);
      var Jc = int.Parse(j[1]);

      var mvB = Math.Max(Math.Abs(Jr - Br), Math.Abs(Jc - Bc));
      var mvD = Math.Abs(Jr - Dr) + Math.Abs(Jc - Dc);

      if (mvB < mvD) Console.WriteLine("bessie");
      else if (mvB > mvD) Console.WriteLine("daisy");
      else Console.WriteLine("tie");
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int Br, Bc, Dr, Dc, Jr, Jc;
  cin >> Br >> Bc >> Dr >> Dc >> Jr >> Jc;

  int mvB = max(abs(Jr - Br), abs(Jc - Bc));
  int mvD = abs(Jr - Dr) + abs(Jc - Dc);

  if (mvB < mvD) cout << "bessie\n";
  else if (mvB > mvD) cout << "daisy\n";
  else cout << "tie\n";

  return 0;
}