• toc {:toc}

문제

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 x, y, w, h가 주어진다.

출력

첫째 줄에 문제의 정답을 출력한다.

제한

  • 1 ≤ w, h ≤ 1,000
  • 1 ≤ x ≤ w-1
  • 1 ≤ y ≤ h-1
  • x, y, w, h는 정수

출처:https://www.acmicpc.net/problem/1085

풀이

  1. 삼항연산자를 사용해봤다.
  2. 거리 ⇒ 수직으로 내려야 함. ⇒ 축과 평행한 면으로 수직으로 내려야 하기 때문에 결국 폭같은 경우 x가 0, w 둘 중 어떤 것과 가까운지, 높이와 같은 경우 y가 0, h 둘 중 어떤 것과 가까운지를 확인하면 된다.
#include <iostream>
 
using namespace std;
 
int minDistance(int x, int y, int w, int h);
 
int main() 
{
  	int x, y, w, h;
	cin >> x >> y >> w >> h;
	cout << minDistance(x, y, w, h) << endl;
	
	return 0;
}
 
int minDistance(int x, int y, int w, int h)
{
	int mW, mH;
	(w/2<x)? mW=w-x:mW=x;
	(h/2<y)? mH=h-y:mH=y;
	return (mW<mH)? mW : mH;
}