본문 바로가기

알고리즘 문제풀이

[알고리즘] 백준 1085번 "직사각형에서 탈출" (C/C++) - Don 임베디드

문제 요약:

왼쪽 아래 꼭지점 (0, 0)

오른쪽 위 꼭지점 (w, h) 직사각형의 방 안에 재석이형이 있다.

재석이형의 위치가 (x ,y)일 때,

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

입력으로 x, y, w, h가 순서대로 주어진다.

 

제약:

제한 시간 2초, 메모리 128MB

1 <= w, h <= 1000

1 <= x <= w-1

1 <= y <= h-1

x, y, w, h는 정수

 

예제 1 입력. 예제 1 출력.
6 2 10 3 1
예제 2 입력. 예제 2 출력.
1 1 5 5 1
예제 3 입력. 예제 3 출력.
653 375 1000 1000 347

 

정답 코드:

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
31
32
33
34
35
#include <iostream>
 
#define INVALID_MAX    (1001)
using namespace std;
 
int main()
{
    int nTmp[2= { INVALID_MAX, INVALID_MAX };
    int nMinValue = INVALID_MAX;
    int x, y, w, h;
 
    // 최소 거리는 (y) (x) (h-y) (w-x) 중 최소값
    // EX: (w,h) = (4, 6), (x, y) = (2, 3) 일때,
           //y       //h
            /*  *  *  *  *  */
    //x     /*  *  o  *  *  */
            /*  *  *  *  *  */
    //w     /*  *  *  *  *  */
 
    // 입력값을 받는다.
    cin >> x >> y >> w >> h;
 
    // (h - y), (w - x) 중 최소값 선택.
    nTmp[0= (((h - y) < (w - x)) ? (h - y) : (w - x));
    // x, y 중 최소값 선택
    nTmp[1= ((x < y) ? x : y);
 
    // Tmp0와 Tmp1 중 최소값 선택.
    nMinValue = (nTmp[0< nTmp[1])? nTmp[0] : nTmp[1];
 
    // 정답 출력.
    cout << nMinValue << endl;
 
    return 0;
}
cs

원본링크: https://www.acmicpc.net/problem/1085