https://www.acmicpc.net/problem/2381
2381번: 최대 거리
첫째 줄에 N이 주어진다. 다음 N개의 줄에는 각 점의 x, y좌표가 주어진다. 각 좌표의 범위는 -1,000,000이상 1,000,000이하이다.
www.acmicpc.net
https://blog.naver.com/programmer18/220794470677
최대 거리 (Math)
https://www.acmicpc.net/problem/23812381번: 최대 거리www.acmicpc.netA...
blog.naver.com
도저히 모르겠어서 이 분의 설명을 참고했다.
모든 설명이 완벽한데, 이렇게 계산해도 괜찮은지 의문이 들긴 했다. 예를 들어 y-x의 최대와 최소의 차이를 구했는데 실제로는 그렇게 계산하면 안되는 두 좌표에 대해 구한거라면( a<b 이고 c<d인 )안되는거 아닐까?
물론 답은 그러면 안되지만, 어차피 그런경우 y+x의 최대와 최소 경우가 더 크게 나오기 때문에 상관없다.
모든 두 점은 위의 경우로 분류할 수 있다 (일직선인 경우는 둘 중 어느 경우에 들어가도 상관없음). 각 점에 대해 위의 두가지 방법으로 계산했을때, 어차피 1번 경우인 점은 1번 식이 더 크게 나오고 2번 경우인 점들은 2번 식이 더 크게 나오기 때문에 계산을 어떻게 하든지간에 더 큰걸만 고르기만 하면 맞게 된다.
코드는 다음과 같다.
#include <cstdio>
#include <algorithm>
using namespace std;
int main(void){
int N, a, b, minsMax=-2000001, minsMin=2000001;
int plusMax=-2000001, plusMin=2000001;
scanf("%d", &N);
for(int i=0; i<N; i++){
scanf("%d %d", &a, &b);
if((b-a)<minsMin)
minsMin = (b-a);
if((b-a)>minsMax)
minsMax = (b-a);
if((b+a)<plusMin)
plusMin = (b+a);
if((b+a)>plusMax)
plusMax = (b+a);
}
printf("%d",max(minsMax-minsMin, plusMax-plusMin));
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 1500번] 최대 곱 (Silver 1) (0) | 2020.07.19 |
---|---|
[C/C++ 백준 2381번] 타일 위의 대각선 (Silver 1) (0) | 2020.07.19 |
[C/C++ 백준 4563번] 리벤지 오브 피타고라스 (Silver 1) (0) | 2020.07.18 |
[C/C++ 백준 1334번] 다음 팰린드롬 수 (Silver 3) (0) | 2020.07.18 |
[C/C++ 백준 12021번] 보물찾기 (Silver 1) (0) | 2020.07.17 |