백준 다각형의 면적

KIMYEONGJUN·2024년 5월 28일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다.
좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
첫째 줄에 면적을 출력한다. 면적을 출력할 때에는 소수점 아래 둘째 자리에서 반올림하여 첫째 자리까지 출력한다.

내가 이 문제를 보고 생각해본 부분

이 문제는 신발끈 공식을 이용해서 문제를 풀 수 있다.
int형을 섰을때는 오버플로우가 발생하는지 몰랐었는데 다른 사람의 블로그를 보니 대부분이 long을 사용해서 코드를 작성한것같아서
나도 long으로 바꿔줬다.

코드로 구현

package baekjoon.baekjoon_19;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 백준 2166번 문제
public class Main666 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[][] points = new int[N+1][2];

        for(int i = 0; i < N; i ++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            points[i][0] = Integer.parseInt(st.nextToken());
            points[i][1] = Integer.parseInt(st.nextToken());
        }

        points[N][0] = points[0][0];
        points[N][1] = points[0][1];

        long area = 0;

        for(int i = 0; i < N; i++) {
            area += 1l*points[i][0]*points[i+1][1] - 1l*points[i+1][0]*points[i][1];
        }
        area = Math.abs(area);
        System.out.printf("%.1f", 1d*area/2);
        br.close();
    }
}

신발끈 공식

마무리

처음에는 가벼운 마음으로 문제를 접근했었는데 세번정도 문제를 제출하고 나서 틀렸습니다.라고 나왔을때 아 이문제가 진짜 어렵게 나왔구나라고 생각이 들었다. 신발끈 공식도 처음보는 공식여서 문제가 많이 어렵게 느껴졌다.

profile
Junior backend developer

0개의 댓글