코테/백준

[백준/JAVA] 2166번: 다각형의 면적

imname1am 2023. 5. 18. 23:15
반응형

🔺 문제

 

2166번: 다각형의 면적

첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.

www.acmicpc.net

 

 

🔺 코드

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
30
31
32
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
        int N = Integer.parseInt(br.readLine());
        long[] x = new long[N + 1];
        long[] y = new long[N + 1];
        
        // x,y 좌표 저장
        for(int i = 0 ; i < N ; i++) {
            st = new StringTokenizer(br.readLine()," ");
            x[i] = Integer.parseInt(st.nextToken());
            y[i] = Integer.parseInt(st.nextToken());
        }
        
        // 배열 마지막에 처음 점 다시 넣기 → 마지막 점과 처음 점도 CCW 계산에 포함
        x[N] = x[0];
        y[N] = y[0];
        
        double result = 0;
        for(int i = 0 ; i < N ; i++) {
            result += ((x[i] * y[i+1]) - (x[i+1* y[i]));
        }
        
        String answer = String.format("%.1f", Math.abs(result) / 2.0);
        System.out.println(answer);
    }
}
cs
✅ 해결 아이디어
✔ CCW 활용 (신발끈 공식)
① 원점과 순서대로 나오는 두 점 간 CCW 값 계산 (x₁y₂ - x₂y₁)
② |결과 총합| / 2

 

💥 유의사항

• CCW = 벡터 외적값 = 평행사변형 넓이

⇨ 다각형 넓이 = 원점과 다른 두 점 간의 CCW

( 반시계 방향 → 넓이 양수 / 시계 방향 → 넓이 음수)

 

 


🔺 다른 풀이들

- 과정 설명

 

#백준_2166 다각형의 면적 - Java 자바

#유형 : CCW, 다각형의 넓이 #난이도 : 골드 V #다각형의 넓이는 벡터의 외적으로 구할 수 있다 => 삼각형으로 쪼개서 외적을 누적하여 합하면 된다. ==다각형을 이루는 점 하나를 중심으로 잡고, 그

ukyonge.tistory.com

 

- 2차원 배열 사용

 

[Java] 백준 2166번. 다각형의 면적 (골드5)

https://www.acmicpc.net/problem/2166 2166번: 다각형의 면적 첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는

nodingco.tistory.com


💬 느낀 점

헉... 책 진도 다 나갔다...!! 이제 복습 고고..!!

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

✔ Do it 알고리즘 코딩테스트 자바편

반응형