※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 15821번 문제인 낚이고 낚아라이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/15821 

 

15821번: 낚이고 낚아라

최소 k개의 유효 낚시터를 확보할 수 있는 최소의 낚시 거리를 계산한 후, 이를 제곱한 값을 출력한다. 소수점 세 번째 자리에서 반올림하여 두 번째 자리까지 출력한다.

www.acmicpc.net

낚시 거리가 D일 때 어떤 낚시터가 유효 낚시터일 필요충분조건은 원점으로부터 해당 낚시터까지 가장 멀리 떨어진 점까지의 거리가 D 이하인 것이다. 그러한 점은 주어진 다각형의 꼭짓점 중에 존재한다는 것이 잘 알려져있다.

 

위의 성질을 이용해 반복문을 이용하여 각 낚시터가 유효 낚시터이기 위해 필요한 최소 낚시거리를 구하자. 그리고 이를 이용하여 필요한 낚시거리가 작은 K번째 낚시터를 포함시키기에 충분한 최소 낚시거리를 구해 문제를 해결하자. 이는 정렬을 이용하여 쉽게 구해낼 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;

int N, K;
ll dist[100000];

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

	cin >> N >> K;
	for (int i = 0; i < N; i++) {
		ll& cur = dist[i];
		int P; cin >> P;
		while (P--) {
			ll x, y; cin >> x >> y;
			cur = max(cur, x * x + y * y);
		}
	}

	sort(dist, dist + N);

	cout << dist[K - 1] << ".00";
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 18410 // C++] マージ (Merge)  (0) 2023.01.14
[BOJ 15819 // C++] 너의 핸들은  (0) 2023.01.13
[BOJ 15830 // C++] 싱크홀  (0) 2023.01.13
[BOJ 15829 // C++] Hashing  (1) 2023.01.13
[BOJ 6604 // C++] Matrix Chain Multiplication  (0) 2023.01.13

+ Recent posts