7월 13일(목) - 기하학 (2166번)
2166번: 다각형의 면적
첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다.
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static point[] p;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for (int i = 1; i <= N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
p[i] = new point(x,y);
}
long result = 0;
for (int i = 2; i <= N - 1; i++) {
result = result + ccw(p[1].x, p[1].y, p[i].x, p[i].y, p[i+1].x, p[i+1].y);
}
System.out.println(Math.round(result));
}
public static long ccw(long x1, long y1, long x2, long y2, long x3, long y3) {
long temp = (x1 * y2) + (x2 * y3) + (x3 * y1);
temp = temp - (y1 * x2) - (y2 * x3) - (y3 * x1);
return (temp / 2);
}
public static class point {
long x;
long y;
public point(long x, long y){
this.x = x;
this.y = y;
}
}
}
1. C언어와는 달리, 자바에서는 구조체가 없기때문에 class를 사용하려함
-> 최대한 class를 활용해보려했으나 NullPointerException이 발생하면서 실패
-> 나중에 다시 시도
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N;
static Po[] p;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
p = new Po[N+1];
for(int i=1; i<=N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
p[i] = new Po(x,y);
}
long res = 0;
for(int i=2; i<N; i++) {
res += ccw(p[1], p[i], p[i+1]);
}
res = Math.abs(res);
if(res % 2 == 0) {
System.out.println(res/2+".0");
}else
System.out.println(res/2+".5");
}
public static long ccw(Po p1, Po p2, Po p3) {
//CCW 공식 (x1y2+x2y3+x3y1)−(y1x2+y2x3+y3x1)
return ((p1.x*p2.y) + (p2.x*p3.y) + (p3.x * p1.y)) - ((p1.y*p2.x) + (p2.y*p3.x) + (p3.y*p1.x));
}
public static class Po{
long x;
long y;
public Po(long x, long y) {
this.x=x;
this.y=y;
}
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이출처 -> https://ukyonge.tistory.com/185
'백준(Java) > 23년 7월' 카테고리의 다른 글
[Java] 백준 - 12865번: 평범한 배낭 (0) | 2023.07.17 |
---|---|
[Java] 백준 - 11724번: 연결 요소의 개수 (0) | 2023.07.14 |
[Java] 백준 - 2217번: 로프 (0) | 2023.07.12 |
[Java] 백준 - 10845번: 큐 (0) | 2023.07.11 |
[Java] 백준 - 1003번: 피보나치 함수 (0) | 2023.07.10 |
댓글