| 문제
한수는 지금 (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는 정수
| 예제 입력 1
6 2 10 3
| 예제 출력 1
1
| 문제의 키 포인트
1. 문제를 그림으로 보자.
2. 문제에서의 한수는 직사각형 내부에 위치하고 있고 이를 빠져나가기 위해 경계선에 가장 빠르게 도착해야 한다는 것을 알 수 있다.
| 해결방안(Solution)
1. 두 점을 사이에서 가장 빠른 거리는 대각선이다. 따라서, 대각선의 길이를 구하여 출력하면 해결.
- 대각선의 길이: √(w-x)2 + (h-y)2
2. 처음엔 1번처럼 대각선 길이가 최소길이라 생각했었는데, 그 이론은 틀렸다. 다시 생각해보니 가로, 세로의 차이만 고려해주면 되었던 것...
3. 추가적으로, 가로, 세로 거리의 차와 x, y의 값도 비교해야 되었다.
- 비교하지 않고, 일방적으로 거리의 차로만 값 출력시 틀림.
| 소스코드(SourceCode)
// BOJ_1089_Rectangle, 직사각형에서 탈출하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int x, y, w, h;
int distance_x, distance_y;
scanf("%d %d %d %d", &x, &y, &w, &h);
distance_x = w - x <= x ? w-x: x;
distance_y = h - y <= y ? h-y: y;
printf("%d", distance_x <= distance_y ? distance_x : distance_y);
return 0;
}
| 문제출처
https://www.acmicpc.net/problem/1085
반응형
'코딩 | 알고리즘 & 문제풀이 > 백준_Backjoon' 카테고리의 다른 글
[C언어] Backjoon_Code 4153, 직각삼각형 (0) | 2021.07.31 |
---|---|
[C언어] Backjoon_Code 3009, 네 번째 점 (0) | 2021.07.30 |
[C언어] Backjoon_Code 9020, 골드바흐의 추측 (0) | 2021.07.28 |
[C언어] Backjoon_Code 4948, 베르트랑 공준 (0) | 2021.07.27 |
[C언어] Backjoon_Code 1929, 소수 구하기 (0) | 2021.07.26 |