inblog logo
|
LHS's Study Space
    알고리즘문제풀기랜덤마라톤

    [랜덤 마라톤] Bellevue(25993)

    lhs's avatar
    lhs
    Nov 30, 2024
    [랜덤 마라톤] Bellevue(25993)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    www.acmicpc.net
    https://www.acmicpc.net/problem/25993
    notion image
    notion image

    1. 문제 풀이 아이디어

    • 최대 시야각이 다른 지형에 의해 가려지는 상황은 발생하지 않는다.
    • 따라서 모든 지점에서 시야각을 독립적으로 계산한 후, 그 중 최대값을 찾으면 된다.

    2. 나의 정답 코드

    public class Main { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(bufferedReader.readLine()); int[][] map = new int[n][2]; for (int i = 0; i < n; i++) { StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine()); map[i][0] = Integer.parseInt(stringTokenizer.nextToken()); map[i][1] = Integer.parseInt(stringTokenizer.nextToken()); } double result = 0; for (int i = 1; i < n - 1; i++) { double left = (double) map[i][1] / (map[i][0] - map[0][0]); double right = (double) map[i][1] / (map[n - 1][0] - map[i][0]); result = Math.max(Math.max(result, left), right); } System.out.println(Math.atan(result) * 180 / Math.PI); bufferedReader.close(); } }

    3. 정리

    • 각 좌표를 map 배열에 저장한다.
    • 양 끝의 좌표를 제외하고, 각 지점에 대해 왼쪽과 오른쪽의 독립적인 dy/dx 값을 구해 최대값을 찾는다.
    • 구한 dy/dx의 최대값에 대해 atan 함수를 사용해 아크탄젠트 값을 구하고, 이를 각도로 변환하기 위해 180을 곱한 후 π로 나누어 문제를 해결한다.
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리

    LHS's Study Space

    RSS·Powered by Inblog