코테/백준
[백준/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 알고리즘 코딩테스트 자바편
반응형