티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 1085번 직사각형에서 탈출
https://www.acmicpc.net/problem/1085

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

(x, y) 에 있는 한수가 (0, 0) ~ (w, h) 직사각형의 경계선까지 가는 최소값을 출력

 

2. 풀이

(0, 0), (w, 0), (0, h), (w, h) 의 네 꼭지점으로 이루어진 직사각형을 그려봅니다.
그리고 그 직사각형 내부에 있는 (x, y) 에 점을 하나 찍습니다.
 
그 상태에서 (x, y) 부터 직사각형의 각 경계선, 즉 4개의 선분 중
가장 가까운 선분까지의 거리를 출력하면 되는 문제입니다.
 
예제 입력을 보면서 자세히 살펴보겠습니다.
 
첫 번째 예제를 그림으로 표현하면 아래와 같습니다.
여기서 직사각형의 경계선까지의 거리의 최소값은 1이 됩니다. (위쪽, 즉 h - y)

예제 입력 1 (6 2 10 3)

 
두 번째 예제를 그림으로 표현하면 아래와 같습니다.
여기서 직사각형의 경계선까지의 거리의 최소값은 1이 됩니다. (왼쪽 혹은 아래쪽, 즉 x 혹은 y)

예제 입력 2 (1 1 5 5)

 
나머지 예제도 같은 방식으로 검토해보면
x, y, w - x, h - y 중 최소값이라는 것을 알 수 있습니다.
 
최소값을 찾고 출력하는 것에 대한 풀이는 아래 코드 참고하시면 됩니다.

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
1085_직사각형에서 탈출
1112KB	0ms
*/
#include <cstdio>

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	int x, y, w, h;
	scanf("%d %d %d %d", &x, &y, &w, &h);
	
	int min = x;
	if (y < min) min = y;
	if (w - x < min) min = w - x;
	if (h - y < min) min = h - y;

	printf("%d\n", min);
	return 0;
}

 

728x90
반응형
댓글