티스토리 뷰
문제
한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 x y w h가 주어진다. w와 h는 1,000보다 작거나 같은 자연수이고, x는 1보다 크거나 같고, w-1보다 작거나 같은 자연수이고, y는 1보다 크거나 같고, h-1보다 작거나 같은 자연수이다.
출력
첫째 줄에 문제의 정답을 출력한다.
예제 입력 1
6 2 10 3
예제 출력 1
1
해설
간단한 문제라 딱히 설명할 게 없다. 한 가지 주의해야 할 점은 한수의 좌표 H(x, y)에 사각형 오른쪽 상단 좌표 Rec(w, h)에서 w - x, h - y의 절대값을 구해 둘 중 작은 값을 출력하면 된다고 착각하는 것이다.
H(1, 2), Rec(5, 5)이면 w - x = 4, 5 - 2 = 3이 된다. 따라서 최소값은 3될 것이다. 그러나 이는 원하는 출력이 아니다. 이것은 점 H와 사각형의 윗변과 오른쪽변까지의 거리만을 비교한 최소값일 뿐이다. 점 H와 밑변과 왼쪽변까지의 거리도 확인해야 결과를 바르게 출력할 수 있다. 위의 경우라면 왼쪽변까지의 거리 1 - 0 = 1과 밑변까지의 거리 2 - 0 = 2도 비교해야 하면 그렇다면 최소값은 1이 된다. 따라서 이러한 경우를 고려하여 거리를 확인하는 코드를 완성하면 아래와 같다.
result1 = w - x;
result2 = h - y;
if (x <= result1) {
result1 = x;
}
if (y <= result2) {
result2 = y;
}
위 코드와 같이 우선 점 H에서 좌우변, 상하변의 거리의 최소값을 구한다. 다시 그중(result1, result2) 최소값은 비교하여 결과를 출력하는 코드를 아래와 같이 완성하였다.
소스코드: C
#include <stdio.h>
int main(int argc, char *argv[])
{
int x, y, w, h;
int result1, result2, min;
scanf("%d %d %d %d", &x, &y, &w, &h);
result1 = w - x;
result2 = h - y;
if (x <= result1) {
result1 = x;
}
if (y <= result2) {
result2 = y;
}
if (result1 <= result2) {
min = result1;
} else {
min = result2;
}
printf("%d\n", min);
return 0;
}
'Python > 심사문제' 카테고리의 다른 글
백준(BAEKJOON): 네 번째 점(3009번) (0) | 2020.06.10 |
---|---|
백준(BAEJOON): 별 찍기 - 10(2447번) (2) | 2020.06.06 |
백준(BAEKJOON): 하노이 탑 이동 순서(11729번) (0) | 2020.05.19 |
백준(BAEKJOON): 골드바흐의 추측(9020번) (0) | 2020.04.29 |
백준(BAEKJOON): 베르트랑 공준(4948번) (0) | 2020.04.28 |
- Total
- Today
- Yesterday
- Mac
- baekjoon
- word
- 북한말
- Python
- QtDesigner
- python3
- tips
- setText()
- NK
- words
- BOJ
- books
- 유래
- 리규찬
- 리찬규
- django
- Tistory
- QGridLayout
- locallibrary
- 소수
- judge
- PyQt5
- MacOS
- 어원
- QLineEdit
- QLabel
- 백준
- C
- QComboBox
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |