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

 

이번에 볼 문제는 백준 25993번 문제인 Bellevue이다.
문제는 아래 링크를 확인하자.

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

 

한 방향으로의 시야각 최댓값을 찾을 때 주어지는 꺾이는 점만을 이용해 판단해도 충분함을 관찰하자. 해안가와 해당 점을 잇는 직선을 해안가를 원점으로 하는 직선들로 생각하면 이를 쉽게 이해할 수 있을 것이다.

 

왼쪽으로의 시야각과 오른쪽으로의 시야각의 최댓값 중 더 큰 값을 찾자.

 

글쓴이는 tanl값을 좌표를 이용해 계산 후 atan2l함수를 이용해 각도로 변환하여 문제를 해결하였다.

 

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

#include <iostream>
#include <cmath>
using namespace std;
typedef long double ld;

const ld PI = acosl(-1);
int N;
int P[50000][2];
ld X, Y;

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

	cin >> N;
	for (int i = 0; i < N; i++) cin >> P[i][0] >> P[i][1];
	for (int k = 1; k + 1 < N; k++) {
		int dx = P[k][0] - P[0][0], dy = P[k][1];
		X = max(X, atan2l(dy, dx));
		dx = P[N - 1][0] - P[k][0];
		Y = max(Y, atan2l(dy, dx));
	}

	cout << fixed;
	cout.precision(10);
	cout << max(X, Y) * 180 / PI;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 7804 // C++] Taxi!  (3) 2024.09.04
[BOJ 14265 // C++] 영선 수열  (3) 2024.09.03
[BOJ 23930 // C++] Parcels  (6) 2024.09.01
[BOJ 10349 // C++] Wet Tiles  (1) 2024.08.31
[BOJ 10425 // C++] 피보나치 인버스  (1) 2024.08.30

+ Recent posts