728x90

문제

한수는 지금 (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

 

예제 입력 2

1 1 5 5

 

예제 출력 2 

1

 

예제 입력 3

653 375 1000 1000

 

예제 출력 3 

347

 

예제 입력 4 

161 181 762 375

 

예제 출력 4 

161

 

알고리즘 분류

  • 수학
  • 기하학
 

 

문제 출처

https://www.acmicpc.net/problem/1085

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net

 


 

문제 해결 방법

  • |x - 0|, |y - 0|, |h - y|, |w - x| 최솟값이 점 (x, y)에서 직사각형의 경계선까지 가는 거리의 최솟값이다.

 

코드

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

int x, y, w, h;
vector<int> nums;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

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

    nums.push_back(abs(y - h));
    nums.push_back(abs(w - x));
    nums.push_back(abs(0 - x));
    nums.push_back(abs(0 - y));

    sort(nums.begin(), nums.end());    // 오름차순 정렬

    cout << nums[0] << '\n';

    return 0;
}

 

채점 결과

 

참고

  • [단계별로 풀어보기] > [기하 1]
  • 브론즈III

 

728x90

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ-3053][C++] 택시 기하학  (0) 2022.11.10
[BOJ-2477][C++] 참외밭  (0) 2022.11.10
[BOJ-4153][C++] 직각삼각형  (0) 2022.11.10
[BOJ-3009][C++] 네 번째 점  (0) 2022.11.10
[BOJ-4358][C++] 생태학  (0) 2022.11.09
[BOJ-11478][C++] 서로 다른 부분 문자열의 개수  (0) 2022.11.09
[BOJ-1269][C++] 대칭 차집합  (0) 2022.11.09
[BOJ-1764][C++] 듣보잡  (0) 2022.11.09