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

 

이번에 볼 문제는 백준 2381번 문제인 최대 거리이다.
문제는 아래 링크를 확인하자.

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

 

2381번: 최대 거리

첫째 줄에 N이 주어진다. 다음 N개의 줄에는 각 점의 x, y좌표가 주어진다. 각 좌표의 범위는 -1,000,000이상 1,000,000이하이다.

www.acmicpc.net

두 점 사이의 택시거리는 (1) 두 점을 각각 지나는 기울기 1의 직선 사이의 택시거리와 (2) 두 점을 각각 지나는 기울기 -1의 직선 사이의 택시거리 두 값 중 최댓값으로 표현할 수 있다.

 

따라서 각 직선들을 x축(또는 y축)의 교점으로 대표시키고 서로 가장 멀리 떨어진 직선 사이의 거리를 구해 문제를 해결할 수 있다.

 

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

#include <iostream>
using namespace std;

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

	int summx = -1000000007, summn = 1000000007, diffmx = -100000007, diffmn = 1000000007;
	int N; cin >> N;
	while (N--) {
		int x, y; cin >> x >> y;
		int sm = x + y;
		if (summx < sm) summx = sm;
		if (summn > sm) summn = sm;
		int diff = x - y;
		if (diffmx < diff) diffmx = diff;
		if (diffmn > diff) diffmn = diff;
	}

	cout << max(summx - summn, diffmx - diffmn);
}
728x90

+ Recent posts