[백준 8574] Ratownik (C#, C++) - soo:bak
작성일 :
문제 링크
설명
해변에서 구명요원의 위치와 시야 반경이 주어집니다. 구명요원으로부터의 거리가 시야 반경을 넘는 아이들은 보이지 않습니다.
각 아이의 좌표가 주어질 때, 시야 밖에 있는 아이들의 수를 출력하는 문제입니다.
접근법
먼저, 각 아이와 구명요원 사이의 유클리드 거리 제곱을 계산합니다.
다음으로, 시야 반경의 제곱과 비교합니다. 거리 제곱이 반경 제곱보다 크면 시야 밖에 있는 것이므로 개수를 하나 늘립니다.
이렇게 제곱 비교를 사용하면 제곱근 연산 없이 정수 연산만으로 처리할 수 있습니다.
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
using System;
namespace Solution {
class Program {
static void Main(string[] args) {
var first = Console.ReadLine()!.Split();
var n = int.Parse(first[0]);
var k = int.Parse(first[1]);
var x = int.Parse(first[2]);
var y = int.Parse(first[3]);
var k2 = k * k;
var ans = 0;
for (var i = 0; i < n; i++) {
var line = Console.ReadLine()!.Split();
var cx = int.Parse(line[0]);
var cy = int.Parse(line[1]);
var dx = x - cx;
var dy = y - cy;
var dist2 = dx * dx + dy * dy;
if (dist2 > k2)
ans++;
}
Console.WriteLine(ans);
}
}
}
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;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k, x, y; cin >> n >> k >> x >> y;
int k2 = k * k;
int ans = 0;
for (int i = 0; i < n; i++) {
int cx, cy; cin >> cx >> cy;
int dx = x - cx;
int dy = y - cy;
int dist2 = dx * dx + dy * dy;
if (dist2 > k2)
ans++;
}
cout << ans << "\n";
return 0;
}