알고리즘 공부/백준 문제풀이

1085_백준 [직사각형에서 탈출]

yongyongMom 2022. 9. 20. 20:44
SMALL

2022.09.20

브론즈 3

c++ 사용

 

문제

-- 한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다.

-- 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

입력

-- 첫째 줄에 x, y, w, h가 주어진다.

#include<iostream>
using namespace std;

int main() {
	int x, y, w, h; // 한수의 위치와 직사각형 오른쪽 위 꼭지점 위치

	cin >> x >> y >> w >> h;

	//0,0 랑 비교
	//각 좌표 비교

	int zero; // 원점과의 거리 비교 
	int line; // 오른쪽 위 꼭짓점과의 거리 비교

	if (x > y) zero = y;
	else zero = x;

	if (w - x > h - y) line = h - y;
	else line = w - x;

	if (zero > line) cout << line;
	else cout << zero;
}

 

  1. 각 위치의 좌표를 입력받는다.
  2. 한수와 원점과의 위치, 한수와 꼭지점과의 위치를 구해 직사각형의 변에 더 가까운 곳의 거리의 구한다. (여기서 말하는 거리는 직선거리만 고려한다.)
  3. 원점과의 거리는 곧 한수의 x,y좌표 값과 같으므로 더 작은 값을 zero 변수에 저장한다.
  4. 꼭짓점과의 거리는 각 꼭짓점의 x,y 좌표와 한수의 x,y 좌표의값을 빼 더 작은 값은 line 변수에 저장한다.
  5. zero 와 line 값을 비교해 더 작은 값을 출력하면 끄읕--!--

 

해당 문제는 직선거리만을 구하면 되는 문제입니다..

따라서 x 좌표끼리의 거리, y 좌표끼리의 거리 를 구해

그 중에서도 더 작은 값을 구하면 되는 문제로 간단히 이해하고 문제 풀이를 진행하였습니다.

이점에서 원점과의 거리를 고려해야 하는 점이 신경써서 확인해야 하는 부분이라고 ...

풀 때는 못 느꼈지만 이 글을 쓰다보니 느껴집니다....!!

반응형
LIST