PS/백준

[백준/Baekjoon]<1085번> 직사각형에서 탈출 [C/C++/Python][Class 2]

DigIT_JHB 2022. 9. 19. 15:39

백준 1085번 직사각형에서 탈출
백준 1085번 직사각형에서 탈출

 

문제

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

#문제 풀이 방법

1. 한수의 위치(x,y)와 직사각형 오른쪽 위 꼭짓점 좌표(w,h)가 입력되고 

한수의 위치에서 직사각형의 경계선까지의 최소거리를 출력한다.

2. (x,y)에서 직사각형 4개의 경계선 사이의 거리를 구하고 그 중 최솟값을 알아내자!

 

반응형

 

#C

#include <stdio.h>
int main()
{

    int x,y,w,h;
    int ds[4];
    int min=1000;
    scanf("%d %d %d %d",&x,&y,&w,&h);
    ds[0]=h-y;//위쪽 변과 점 사이의 거리
    ds[1]=y-0;//아래쪽 변과 점 사이의 거리
    ds[2]=x-0;//왼쪽 변과 점 사이의 거리
    ds[3]=w-x;//오른쪽 변과 점 사이의 거리
    for(int i=0;i<4;i++)
    {
        if(ds[i]<min)
        {
            min=ds[i];
        }
    }
    printf("%d",min);
    return 0;    
}

#C++

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int x,y,w,h;
    vector<int> v;
    int min=1000;
    cin>>x>>y>>w>>h;
    v.push_back(h-y);
    v.push_back(y-0);
    v.push_back(x-0);
    v.push_back(w-x);
    cout<<*min_element(v.begin(),v.end());
    return 0;    
}

#Python

x,y,w,h=map(int,input().split())
print(min(h-y,y-0,x-0,w-x))
반응형