골드5 - 백준 11758 CCW

루밤·2021년 7월 22일
0

골드 3, 4, 5

목록 보기
1/26
post-thumbnail

백준 11758번 CCW

https://www.acmicpc.net/problem/11758



접근방법

이 문제는 좌표상의 세 점을 이었을 때, 방향을 구하는 문제이다. 우선 첫 번째와 두 번째 점을 이어서 기준이 되는 선을 생각해주었다. 그 선과 일직선이 되려면 x,y축이 같은 비율로 증가 또는 감소되어야 하고 비율과 다르게 벗어날 경우 시계 방향인지 반시계 방향인지 판단해주었다.


풀이

(선분A : p2 - p1)
(선분B : p3 = p2)

선분A와 선분B를 x좌표를 기준으로 비교하였고 y의 변화량에 따라서 방향을 구분해주었다. y좌표의 변화량을 비교해주기 위해서 x좌표의 변화량을 공배수로 같게 만들어주었고 y의 변화량도 같은 비율로 곱해서 비교해주었다.
만약 x좌표의 변화량이 0일 때는 따로 구분을 해주어 처리해주었다.



코드

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	pair<int, int> p1;
	pair<int, int> p2;
	pair<int, int> p3;

	cin >> p1.first >> p1.second;
	cin >> p2.first >> p2.second;
	cin >> p3.first >> p3.second;

	pair<int, int> p1top2 = { p2.first - p1.first, p2.second - p1.second };
	pair<int, int> p2top3 = { p3.first - p2.first, p3.second - p2.second };

	if (p1top2.first != 0)
	{
		int ny = p1top2.second * p2top3.first;
		int nny = p2top3.second * p1top2.first;

		if (nny > ny)
			cout << 1 << endl;
		else if (nny < ny)
			cout << -1 << endl;
		else
			cout << 0 << endl;
	}
	else
	{
		if (p1top2.second > 0)
		{
			if (p2top3.first > 0)
				cout << -1 << endl;
			else if (p2top3.first < 0)
				cout << 1 << endl;
			else
				cout << 0 << endl;
		}
		else if (p1top2.second < 0)
		{
			if (p2top3.first > 0)
				cout << 1 << endl;
			else if (p2top3.first < 0)
				cout << -1 << endl;
			else
				cout << 0 << endl;
		}
		else
			cout << 0 << endl;
	}
	return 0;
}

0개의 댓글

관련 채용 정보