๋ฐฑ์ค€/Gold

[BOJ] 11758 : CCW

Jaeguk 2022. 5. 12. 23:31

๋ฌธ์ œ ๋งํฌ

11758๋ฒˆ: CCW (acmicpc.net)

 

11758๋ฒˆ: CCW

์ฒซ์งธ ์ค„์— P1์˜ (x1, y1), ๋‘˜์งธ ์ค„์— P2์˜ (x2, y2), ์…‹์งธ ์ค„์— P3์˜ (x3, y3)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) ๋ชจ๋“  ์ขŒํ‘œ๋Š” ์ •์ˆ˜์ด๋‹ค. P1, P2, P3์˜ ์ขŒํ‘œ๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.

www.acmicpc.net

CCW ๋ฌธ์ œ

ํ’€์ด

 ์ฒ˜์Œ์— ๋‚˜๋Š” CCW๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋Š” ์ค„ ๋ชจ๋ฅด๊ณ  ์ง์ ‘ ๊ธฐ์šธ๊ธฐ์™€ ๋ฐฉํ–ฅ์„ ๊ตฌํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ คํ–ˆ๋‹ค. ์ด๊ฑด ์•„๋‹Œ๊ฒƒ๊ฐ™์•„์„œ ๊ตฌ๊ธ€๋ง ํ•˜๋‹ค๊ฐ€, ๊ทธ๋Ÿผ ๊ทธ๋ ‡์ง€ CCW ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋Š” ๊ฑธ ์•Œ์•˜๋‹ค.

 CCW๋ž€ Counter Clockwise์˜ ์ค„์ž„๋ง๋กœ ์  A,B,C๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋†“์—ฌ์žˆ๋Š”์ง€, ์ผ์ง์„ ์ƒ์— ๋†“์—ฌ์žˆ๋Š”์ง€, ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋†“์—ฌ์žˆ๋Š”์ง€ ํŒ๋ณ„ํ•ด์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

์ฐธ๊ณ  ๋งํฌ

๋‚˜๋Š” ๋ฐ๊ตฌ๋ฆฌ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ CCW ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ–ˆ๋‹ค.

[์•Œ๊ณ ๋ฆฌ์ฆ˜] CCW๋กœ ์„ธ ์ ์˜ ๋ฐฉํ–ฅ์„ฑ ํŒ๋ณ„ํ•˜๊ธฐ (tistory.com)

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] CCW๋กœ ์„ธ ์ ์˜ ๋ฐฉํ–ฅ์„ฑ ํŒ๋ณ„ํ•˜๊ธฐ

0. ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์ฒซ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์— ์“ธ ๋‚ด์šฉ์€ CCW์ž…๋‹ˆ๋‹ค. ์›๋ž˜๋Š” ๊ธฐํ•˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์„ ์ „๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฃจ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ๊ธ€์ด ๊ธธ์–ด์ ธ์„œ CCW๋งŒ ์“ฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ๊ธ€์˜ ๋‚ด์šฉ

degurii.tistory.com

 

๊ณต์‹

๋‘ ๋ฒกํ„ฐ์— ๋Œ€ํ•ด์„œ ์™ธ์ ์„ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

u๋ฒกํ„ฐ๋Š” (m1,m2,m3) ์ด๊ณ  v๋ฒกํ„ฐ๋Š” (n1,n2,n3) ์ธ๋ฐ ํ•ด๋‹น ๋ฌธ์ œ๋Š” 2์ฐจ์›์ด๋ฏ€๋กœ z์ถ• ์ขŒํ‘œ์ธ m3์™€ n3๋Š” 0์ด๋‹ค.

๋”ฐ๋ผ์„œ u x v = (0, 0, m1n2 - m2n1) ์ด๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

u x v ๋ฒกํ„ฐ๋Š” z์ถ•์œผ๋กœ์œผ ๋ฐฉํ–ฅ๋งŒ ์กด์žฌํ•˜๋ฏ€๋กœ xyํ‰๋ฉด์— ์ˆ˜์ง์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ๊ตฌ๋ฆฌ๋‹˜ ๋ธ”๋กœ๊ทธ์— ์žˆ๋Š” ์˜ค๋ฅธ์†์˜ ๋ฒ•์น™์— ๋”ฐ๋ผ์„œ D = m1n2 - m2n1 ์ด๋ผ๊ณ  ํ•˜๋ฉด

1. D > 0 ์ผ ๋•Œ๋Š” ์™ธ์ ํ•œ ๋ฒกํ„ฐ๊ฐ€ xyํ‰๋ฉด์—์„œ z์ถ•์— +๋ฐฉํ–ฅ์œผ๋กœ ์ˆ˜์ง(์—„์ง€๊ฐ€ ์œ„๋กœ)์ด๋ฏ€๋กœ ์˜ค๋ฅธ์† ๋ฒ•์น™์„ ์“ฐ๋ฉด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

2. D = 0 ์ผ ๋•Œ๋Š” ๋‘ ๋ฒกํ„ฐ๊ฐ€ ์ผ์ง์„  ์œ„์— ์กด์žฌํ•œ๋‹ค.

3. D < 0 ์ผ ๋•Œ๋Š” ์™ธ์ ํ•œ ๋ฒกํ„ฐ๊ฐ€ xyํ‰๋ฉด์—์„œ z์ถ•์— -๋ฐฉํ–ฅ์œผ๋กœ ์ˆ˜์ง(์—„์ง€๊ฐ€ ์•„๋ž˜๋กœ)์ด๋ฏ€๋กœ ์˜ค๋ฅธ์† ๋ฒ•์น™์„ ์“ฐ๋ฉด ์‹œ๊ณ„๋ฐฉํ–ฅ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์  A,B,C ๋ฅผ ๊ฐ๊ฐ A(x1, y1, 0), B(x2, y2, 0), C(x3, y3, 0) ์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ

AB๋ฒกํ„ฐ๋Š” (x2 - x1, y2 - y1, 0 ) AC๋ฒกํ„ฐ๋Š” (x3 - x1, y3 - y1, 0 ) ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์— ๊ณต์‹์— ๋Œ€์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ x2 - x1 = m1, y2 - y1 = m2 , x3 - x1 = n1, y3 - y1 = n2 ๋ผ๊ณ  ํ•˜๋ฉด

D = m1n2 - m2n1 = (x2 - x1)(y3 - y1) - (y2 - y1)(x3 - x1) ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

์  A, B, C ์— ๋Œ€ํ•ด์„œ D ๊ฐ’์„ ๊ตฌํ•œ ๋‹ค์Œ์— ํŒ๋ณ„์‹์„ ์ ์šฉํ•˜๋ฉด ๋‹ต์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <math.h>
#include <queue>
#include <climits>
#include <algorithm>
#include <iomanip>
#include <map>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef priority_queue<pair<intint>vector<pair<intint>>, greater<pair<intint>>> Priority_queue;
const int INF = INT_MAX;
 
int CCW(pair<intint> P1, pair<intint> P2, pair<intint> P3) {
    return (P2.first - P1.first) * (P3.second - P1.second) - (P3.first - P1.first) * (P2.second - P1.second);
}
int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    pair<intint> P1;
    pair<intint> P2;
    pair<intint> P3;
    cin >> P1.first >> P1.second;
    cin >> P2.first >> P2.second;
    cin >> P3.first >> P3.second;
    int D = CCW(P1, P2, P3);
    if (D < 0)
        cout << "-1\n";
    else if (D == 0)
        cout << D << "\n";
    else cout << "1\n";
    return 0;
}
cs

์ˆ˜ํ•™์„ ์ฝ”๋”ฉ๊ณผ ์ ‘๋ชฉํ•˜๋ ค๋‹ˆ๊นŒ ๋” ์–ด๋ ค์šด ๊ฒƒ๊ฐ™๋‹ค. ์™œ ์ปด๊ณต๊ณผ๊ฐ€ ์ˆ˜ํ•™์„ ์ž˜ํ•ด์•ผํ•œ๋‹ค ํ•˜๋Š”์ง€ ์•Œ ๊ฒƒ๊ฐ™๋‹ค.

 

728x90