티스토리 뷰

알고리즘/백준

백준 / BOJ / 15937 두 박스 C++

4567은 소수 2020. 11. 12. 01:33

www.acmicpc.net/problem/15973

 

15973번: 두 박스

표준 입력으로 두 박스의 정보가 한 줄에 하나씩 주어진다. 각 박스의 정보는 왼쪽 아래 꼭짓점 좌표 (x1, y1)과 오른쪽 위 꼭짓점 좌표 (x2, y2)로 구성되는데 이들 좌푯값 x1, y1, x2, y2 (x1 < x2, y1 < y2)

www.acmicpc.net

 

오랜만에 수학 문제를 풀고 싶어서 도전했지만 수학이라기보단 노가다 문제였습니다.

문제는 어렵지 않다. 두 박스가 한 점에서 만나는지 선으로 만나는지 교차하는지 (내부에 포함되는 것 포함) 

만나지 않는지를 나누어 계산하면 됩니다. 

 

상대적으로 정답률이 낮은 이유는 아마 여러 경우 중 놓친 것이 있거나 했기 때문일 것입니다.

(나도 몇 번 틀렸다.)

 

구조체를 이용하여 구현하면 좀 더 깔끔할 것이고, 좌표를 큰 값에서 작은 값으로 항상 빼도록 하면 더 깔끔하겠지만

힘이 빠져 그러지 못했습니다. ㅎㅎ

 

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>

using namespace std;

vector<pair<long long, long long>>box1, box2;
vector<string>result;
string res;


void make_box()
{
	long long x1, y1;
	long long x2, y2;
	cin >> x1 >> y1 >> x2 >> y2;
	box1.push_back({ x1,y1 });
	box1.push_back({ x2,y2 });

	cin >> x1 >> y1 >> x2 >> y2;
	box2.push_back({ x1,y1 });
	box2.push_back({ x2,y2 });

	result.push_back("POINT");
	result.push_back("LINE");
	result.push_back("FACE");
	result.push_back("NULL");
}

string solve(vector<pair<long long,long long>>v1,vector<pair<long long,long long>>v2)
{
	if (v1[0].first == v2[1].first || v1[1].first == v2[0].first)
	{
		if (v1[0].second == v2[1].second || v1[1].second == v2[0].second)
			return result[0];
		else if ((abs(v1[1].second - v1[0].second) + abs(v2[1].second - v2[0].second)) > max(abs(v1[1].second - v2[0].second), abs(v1[0].second - v2[1].second)))
		{
			return result[1];
		}
		else
			return result[3];
	}
	else if ((abs(v1[0].first - v1[1].first) + abs(v2[0].first - v2[1].first)) > max(abs(v1[0].first - v2[1].first), abs(v1[1].first - v2[0].first)))
	{
		if (v1[0].second == v2[1].second || v1[1].second == v2[0].second)
			return result[1];
		else if ((abs(v1[1].second - v1[0].second) + abs(v2[1].second - v2[0].second)) > max(abs(v1[0].second - v2[1].second), abs(v1[1].second - v2[0].second)))
			return result[2];
		else
			return result[3];
	}
	else
		return result[3];
}

int main()
{
	make_box();
	res = solve(box1, box2);
	cout << res;
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 / BOJ / 1764 듣보잡 C++  (0) 2020.11.19
백준 / BOJ / 5557 1학년 C++  (0) 2020.11.16
백준 / BOJ / 16236 아기상어 C++  (0) 2020.11.15
백준 / BOJ / 2636 치즈 C++  (0) 2020.11.10
백준 / BOJ / 1946 신입 사원 C++  (0) 2020.11.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함