문제는 간단합니다. 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);
이런식으로 삼항연산자 문을 전체로 괄호로 한 번 더 묶으면 해결된다.
'역시 내 문제해결 알고리즘은 잘못됐다 > 수학' 카테고리의 다른 글
백준 1929번 소수 구하기 [C/C++] (0) | 2021.01.18 |
---|---|
백준 11050번 이항 계수 1 [C/C++] (0) | 2021.01.13 |
백준 2609번 C/C++ (0) | 2020.08.20 |