※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1925번 문제인 삼각형이다.
문제는 아래 링크를 확인하자.

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

 

1925번: 삼각형

평면상에 세 개의 점이 주어지면, 그 세 점으로 이루어지는 삼각형은 유일하게 결정된다. 또는, 삼각형이 이루어지지 않기도 한다. 세 점의 좌표가 주어졌을 때 다음에 따라 이 삼각형의 종류를

www.acmicpc.net

주어지는 세 점이 이루는 도형이 문제에 주어진 분류 중 어디에 들어가는지를 판별하는 문제이다.

 

세 점이 한 직선 위에 있는지는 외적을 이용해 간단히 판단할 수 있다.

그 외의 경우는 크기순으로 정렬한 세 변의 길이와 피타고라스 정리 등을 이용해 분류할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;

pll X, Y, Z;
ll D[3];

int CCW(pll& A, pll& B, pll& C) {
	ll ccw = (B.first - A.first) * (C.second - A.second) - (B.second - A.second) * (C.first - A.first);
	if (ccw > 0) return 1;
	else if (ccw < 0) return -1;
	else return 0;
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> X.first >> X.second >> Y.first >> Y.second >> Z.first >> Z.second;
	if (CCW(X, Y, Z) == 0) cout << 'X';
	else {
		D[0] = (Y.first - X.first) * (Y.first - X.first) + (Y.second - X.second) * (Y.second - X.second);
		D[1] = (Z.first - X.first) * (Z.first - X.first) + (Z.second - X.second) * (Z.second - X.second);
		D[2] = (Z.first - Y.first) * (Z.first - Y.first) + (Z.second - Y.second) * (Z.second - Y.second);
		sort(D, D + 3);

		if (D[0] == D[1] && D[1] == D[2]) cout << "JungTriangle";
		else if (D[0] + D[1] == D[2]) {
			if (D[0] == D[1]) cout << "Jikkak2Triangle";
			else cout << "JikkakTriangle";
		}
		else if (D[0] + D[1] < D[2]) {
			if (D[0] == D[1]) cout << "Dunkak2Triangle";
			else cout << "DunkakTriangle";
		}
		else {
			if (D[0] == D[1] || D[1] == D[2]) cout << "Yeahkak2Triangle";
			else cout << "YeahkakTriangle";
		}
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 18135 // C++] 겨울나기  (0) 2023.08.12
[BOJ 18134 // C++] 치삼이의 대모험  (0) 2023.08.11
[BOJ 1972 // C++] 놀라운 문자열  (0) 2023.08.09
[BOJ 1996 // C++] 지뢰 찾기  (0) 2023.08.08
[BOJ 28431 // C++] 양말 짝 맞추기  (0) 2023.08.07

+ Recent posts