1085번: 직사각형에서 탈출

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

www.acmicpc.net

문제는 간단합니다. x,y좌표를 기준으로 상하좌우로 가장 가까운 곳을 찾으면 됩니다. 

 

코드1

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

int main()
{
	int x, y, w, h;
	int distance;
	int distance2;

	scanf("%d %d %d %d", &x, &y, &w, &h);

	if (w - x < x) distance = w - x;
	else distance = x;

	if (h - y < y) distance2 = h - y;
	else distance2 = y;

	distance > distance2 ? std::cout << distance2 : std::cout << distance;

	return 0;
}

이 처럼 코드를 짜면 해결이 된다.

 

근데 문제는 다르게 코드를 짜다가 문제가 생겼다.

#include <iostream>
using namespace std;

int main()
{
	int x, y, w, h;
	cin >> x >> y >> w >> h;

	w = w - x;
	h = h - y;

	x = x >= w ? w : x;
	y = y >= h ? h : y;
	
	cout << (x >= y) ? y : x; //x와 y가 같은 경우에는 x > y로 조건을 설정하면 프린트가 안되기에 >=를 사용함.

	return 0;
}

처럼 코드를 짰더니 틀렸다고 나왔었다.  그 이유는 ( x >= h)에서 true(1) false(0)값이 출력되고 정작 y랑 x는 출력이 안되었던 것인데..

result = (x >= y) ? y : x;
cout << result;

이것처럼 코드를 바꾸거나

cout << ((x > y) ? y : x);

이런식으로 삼항연산자 문을 전체로 괄호로 한 번 더 묶으면 해결된다.