Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 17장
- 1300번
- Adapater Pattern
- 클린코드
- 10830번
- 2166번
- Dxerr.h
- 가장 긴 증가하는 부분 수열2
- java
- 코딩테스트
- 9장
- 자바의 정석
- 2156번
- Design Pattern
- Design Patterns
- 코딩 테스트
- 2206번
- 프로그래머스
- Spring
- 11286번
- 11758번
- DxTrace
- springboot
- programmers
- 냄새와 휴리스틱
- java의 정석
- SerialDate 리펙터링
- BOJ
- 1043번
- 백준
Archives
- Today
- Total
Don't give up!
[백준] 2166번 : 다각형의 면적 (java) 본문
어떻게 생각하고 문제를 풀었는가?
3~10,000개의 점으로 이루어진 다각형은 각 꼭짓점을 이어 만든 1개 이상의 삼각형으로 표현할 수 있습니다.
따라서 0번째 점을 기준점으로 잡고 시계방향으로 겹치지 않는 삼각형의 너비를 모두 합한다면 다각형의 너비를 찾을 수 있다고 생각하였습니다.
코드
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(reader.readLine());
Position[] positions = new Position[N];
for(int i=0; i<N; i++){
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
long x = Long.parseLong(tokenizer.nextToken());
long y = Long.parseLong(tokenizer.nextToken());
positions[i] = new Position(x, y);
}
reader.close();
long area = 0;
for(int i=1; i+1<N; i++){
area += outerProduct(positions[0], positions[i], positions[i+1]);
}
area = Math.abs(area);
System.out.printf("%.1f\n", (double) area/2);
}
static long outerProduct(Position first, Position second, Position third){
return (first.x * second.y + second.x * third.y + third.x * first.y) - (first.x * third.y + second.x * first.y + third.x * second.y);
}
static class Position {
long x;
long y;
public Position(long x, long y){
this.x = x;
this.y = y;
}
}
}
외적을 사용하여 너비를 구하는 코드를 작성하였습니다.
3개의 점의 x, y좌표로부터 외적으로 각 삼각형의 너비를 구하고 이를 합하여 다각형의 너비를 반환합니다.
'Coding Test > BOJ' 카테고리의 다른 글
[백준] 11758번 : CCW (java) (0) | 2021.08.16 |
---|---|
[백준] 1931번 : 회의실 배정 (java) (0) | 2021.08.14 |
[백준] 1043번: 거짓말 (java) (0) | 2021.08.11 |