From b60449b787abc8bc2f83fc3a47988c5858a13d40 Mon Sep 17 00:00:00 2001 From: oncsr Date: Mon, 10 Mar 2025 13:17:05 +0900 Subject: [PATCH] =?UTF-8?q?[20250310]=20BOJ=20/=20P4=20/=20=EA=B0=90?= =?UTF-8?q?=EC=98=A5=20=EA=B1=B4=EC=84=A4=20/=20=EA=B6=8C=ED=98=81?= =?UTF-8?q?=EC=A4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\354\230\245 \352\261\264\354\204\244.md" | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 "khj20006/202503/10 BOJ P4 \352\260\220\354\230\245 \352\261\264\354\204\244.md" diff --git "a/khj20006/202503/10 BOJ P4 \352\260\220\354\230\245 \352\261\264\354\204\244.md" "b/khj20006/202503/10 BOJ P4 \352\260\220\354\230\245 \352\261\264\354\204\244.md" new file mode 100644 index 00000000..f2e5797d --- /dev/null +++ "b/khj20006/202503/10 BOJ P4 \352\260\220\354\230\245 \352\261\264\354\204\244.md" @@ -0,0 +1,116 @@ +```java + +import java.util.*; +import java.io.*; + +class Point{ + int x,y,id; + Point(int x, int y, int id){ + this.x = x; + this.y = y; + this.id = id; + } + + // this -> a -> b CCW + // 1 : CCW, 0 : line, 1 : CW + int ccw(Point a, Point b) { + long res = (long)a.x * b.y + (long)b.x * this.y + (long)this.x * a.y - ((long)b.x * a.y + (long)this.x * b.y + (long)a.x * this.y); + if(res == 0) return 0; + return res > 0 ? 1 : -1; + } + boolean isInPolygon(List A) { + if(A.size() < 3) return false; + boolean res = true; + for(int i=0;i { + if(a.x == b.x) return a.y-b.y; + return a.x-b.x; + }); + for(int i=0;i lower = new ArrayList<>(); + List upper = new ArrayList<>(); + for(int i=0;i 1 && walls[i].ccw(lower.get(lower.size()-2), lower.get(lower.size()-1)) <= 0) lower.remove(lower.size()-1); + while(upper.size() > 1 && walls[i].ccw(upper.get(upper.size()-2), upper.get(upper.size()-1)) >= 0) upper.remove(upper.size()-1); + lower.add(walls[i]); + upper.add(walls[i]); + } + + List convexHull = new ArrayList<>(); + for(int i=0;i0;i--) { + used[upper.get(i).id] = true; + convexHull.add(upper.get(i)); + } + + + return prison.isInPolygon(convexHull); + + } + +} + +```