작성일 :

문제 링크

13655번 - Guarda Costeira

설명

도망선은 해안에서 수직으로 12해리를 이동합니다. 해안경비정은 도망선과 수평으로 D해리 떨어진 지점에서 출발해 대각선으로 직진합니다.

두 배가 동시에 출발할 때 경비정이 12해리 경계선 전에 도망선을 잡을 수 있는지 판단하는 문제입니다.


접근법

먼저, 도망선이 12해리를 이동하는 시간과 경비정이 대각선 거리를 이동하는 시간을 비교합니다. 경비정의 이동 거리는 직각삼각형의 빗변이므로 12²+D²의 제곱근입니다.

다음으로, 부동소수점 오차를 피하기 위해 제곱 비교를 사용합니다. 경비정 시간이 도망선 시간 이하이면 잡을 수 있으므로 S, 아니면 N을 출력합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var line = "";
      while ((line = Console.ReadLine()) != null) {
        var p = line.Split();
        var D = int.Parse(p[0]);
        var VF = int.Parse(p[1]);
        var VG = int.Parse(p[2]);

        var lhs = (12 * 12 + D * D) * VF * VF;
        var rhs = 12 * 12 * VG * VG;
        Console.WriteLine(lhs <= rhs ? "S" : "N");
      }
    }
  }
}

C++

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

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

  int D, VF, VG;
  while (cin >> D >> VF >> VG) {
    int lhs = (12 * 12 + D * D) * VF * VF;
    int rhs = 12 * 12 * VG * VG;
    cout << (lhs <= rhs ? "S" : "N") << "\n";
  }

  return 0;
}