본문 바로가기
728x90

백준플래/Geometry7

백준 13352, 석양이 진다... 개요 문제 링크 플래 4, Geometry, Randomization 두 개 이하의 직선으로 모든 점을 포함할 수 있는지 여부를 구하기 접근 10523을 풀고 너무 신기해서 풀어본 다음 문제, 로직은 똑같으니 궁금하면 10523 글을 읽어보길 바란다. 마찬가지로 입력 최적화를 하고, long long을 사용하고, CCW가 0인 점의 개수를 세고, 랜덤 추출을 하는데, 이번에는 20번만 해주면 된다. 왜 랜덤 추출 횟수가 줄어들었을까? 이전보다 추출의 필요성이 줄어들었기 때문인데, 10523에서는 직선에 포함된 점의 개수를 구하는 것이므로 서로 다른 직선을 최대한 많이 구해봐야 한다. 이 문제는 한 직선을 잡고, 그 직선과 다른 직선을 잡기만 하면 된다. 만약 다른직선이 잡히기만 했다면, 전체 점이 포함되.. 2023. 3. 11.
백준 10523, 직선 찾기 개요 문제 링크 플래 5, Geometry, Randomization p%이상의 개수의 점을 포함하는 직선 유무 출력하기 접근 도대체 이게 무슨... 무작위화라는 개념을 PS에 적용할 수 있다는 걸 처음 알았다. 그냥 입력데이터에서 임의로 몇개를 뽑아서 돌려보고 맞으면 넘어가버린다는 것. 이게 데이터가 약하기 때문인가?하면 아니다. 문제의 특수성 때문인 것 같은데 읽다보면 이해가 될 것이다. 우선 가능 여부를 점검하는 건 직선의 두 점과 나머지 점들에 대해 CCW를 돌리는 것이다. CCW가 0인, 일직선에 있는 점들의 개수를 구해준다. 이때 CCW에서 1e9곱셈이 나오므로 자료형은 long long을 사용한다. P는 double로 냅두는 것이 심신에 이롭다. 어차피 count와 p의 대소관계만 보면 되니.. 2023. 3. 11.
백준 3843, 볼록 정다각형 개요 문제 링크 플래 5, Geometry 세 점을 포함하는 정N다각형의 최소 N구하기 접근 무슨 이런 문제가 다있나... 로직은 쉬운데 오차 잡기가 어려운 문제. 오차의 핵심은 두 점 사이의 거리가 1 미만이라는 것이다. 처음에는 각을 이용했다. 정다각형은 항상 외접원이 존재한다. 그래서 점 ABC에 대해 외심을 구한다. 외심을 구하는 방법은 AB와 BC의 수직이등분선의 교점을 구한다. 그리고 각 ∠AOB, ∠BOC, ∠COA에 대해 각×10^6 의 GCD를 구해서 n을 3부터 1000까지 돌리면서 360/n과 같으면 n을 출력하는 식으로 해봤는데, GCD를 구하는 것부터 오류였다. 무한소수를 커버할 수 없었다. 그래서 정석 풀이를 썼다. 이번에는 각을 사용할 수 없으므.. 2023. 3. 9.
백준 1077, 넓이 개요 문제 링크 플래 1, Geometry, 컨벡스 헐 두 볼록다각형의 겹치는 넓이 구하기 접근 구현량이 많았던 까다로운 문제, 생각할 부분이 많아서 간략화를 했음에도 코드가 3000비트 정도 된다. 전부 구조체로 구현했는데, 구현할 구조체는 점, 선, 다각형이다. 생각 자체는 구현할 수만 있다면 크게 복잡하지 않다. 만약 서로 포함하는 관계라면, 볼록껍질의 넓이가 두 다각형의 넓이 중 하나와 같을 것이다. 두 다각형을 P,Q라고 할 때 P와 같으면 Q의 넓이가, Q와 같으면 P의 넓이가 정답이 될 것이다. 나머지는 겹치는 다각형을 어떻게든 구해내서 출력하면 된다. 만약 겹치지 않으면? 다각형의 점의 개수가 0개일테니 알아서 넓이를 구하는 과정에서 0이 출력된다. 겹치는 다각형은 어떻게 구해주냐? 보통은.. 2023. 2. 28.
백준 1061, 삼각형 개요 문제 링크 플래 1, Geometry, 컨벡스 헐 한 변을 공유하고 크기가 더 큰 삼각형이 존재하는 삼각형의 개수 구하기 접근 까다로운 기하학 문제, 사실 알고리즘 분류를 알기 전까지는 기하학이라는 사실을 알기 매우 어렵다. 우선 세 점의 색이 모두 달라야하므로 R,G,B 좌표는 vector를 이용해 구분해준다. 그리고 "크기가 커질 수 있다"란 무엇일까? 에 대해 고민해보자. 해답은 커질 수 없는 삼각형에 대해 생각하는 것이다. 전체 경우인 R개수 × B개수 × G개수에서 여집합을 구해 빼주면 되는 것인데, 커질 수 없다 = 최대이다 라고 생각하면 생각보다 매우 단순하다. 두 점, 즉 선분에 대해 크기가 최대인 삼각형을 모두 제외해주면 되는 것인데, 다음의 문제가 생긴다. 선분 RG에 대해 B가 .. 2023. 2. 28.
백준 20149, 선분 교차 3 개요 문제 링크 플래 4, Geometry 교차하는 선분의 교차점, 혹은 선분의 포함 여부 출력 접근 난데없이 날아온 재채점과 WA 때문에 다시 풀었다. 문제점은 끝점에서 만날 때 양 점 중 출력해야 하는 점을 잘못 선택한 것이었다. 날벼락 맞은 느낌에 숏코딩으로 복수했다. 선분이 교차하는 경우의 수는 몇 가지일까? 1) 크로스한다. 2) 평행하며 겹친다. 3) 평행하며 만나지 않는다. 4) 평행하며 끝점에서 만난다. 5) 평행하지 않고 만나지 않는다. 와 같은 경우가 있다. 각각을 그림으로 나타내면 이렇게 되겠다. 3. 먼저 ccw를 알고 있다는 가정 하에 설명을 해보자면, 일반적인 선분의 교차여부는 이렇다. ccw(a,b,c) != ccw(a,b,d) && ccw(a,c,d) != ccw(b,c,d).. 2023. 2. 13.
백준 1151, 그림자 개요 문제 링크 플래 4, 기하학 3차원 도형의 그림자의 넓이 접근 많은 조건 분기라고 되어있는데 조건이 생각보다 많지 않았음. 선인 경우는 두 좌표 이상이 같으면 되고, 무한인 경우는 z좌표가 하나라도 크면 된다. 나머지는 정사영 좌표를 구해서 넓이를 구하면 되는데, 넓이 구할 방법이 생각나지 않아서 그냥 convex hull로 갔다. 어차피 점의 개수는 최대 8개니까 시간은 맘대로 써도 됨. 정사영 구하는 방법은 기하와 벡터에서 공부했던 직선의 방정식을 응용하면 된다. (x-a)/(p-a) = (y-b)/(q-b) = (z-c)/(r-c) z = 0 x = a-(p-a)*c/(r-c), y = b-(q-b)*c/(r-c) Pseudo code proj(point {a,b,c}, point {p,q,r.. 2023. 2. 8.
728x90