본문 바로가기

코딩/백준 BOJ

[백준/C언어] 1085번 - 직사각형에서 탈출

백준 웹사이트 "1085번 - 직사각형에서 탈출" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net


소스 코드

#include <stdio.h>

int main(void){
    int x, y, w, h;
    scanf("%d %d %d %d", &x, &y, &w, &h);
    
    int min1, min2;
    if(x < w-x)
        min1 = x;
    else
        min1 = w-x;
    
    if (y < h-y)
        min2 = y;
    else
        min2 = h-y;

    if(min1<min2)
        printf("%d\n", min1);
    else
        printf("%d\n", min2);
}

문제 풀이

  네 변까지의 거리를 각각 구한 후, 그 중 최솟값을 구하는 문제입니다.

  문제를 시각화하면 위와 같습니다. 이때, 네 변까지의 거리는 각각 x, y, w-x, h-y입니다. Line 8 ~ 11에서는 x와 w-x의 최솟값을 구해 이를 min1에 저장하고, Line 13 ~ 16에서는 y와 h-y의 최솟값을 구해 이를 min2에 저장합니다. 이후 Line 18 ~ 21에서 min1과 min2의 최솟값을 구하면, 네 변까지의 거리 중 최솟값을 구할 수 있습니다.

  이 문제는 반복되는 코드가 많습니다. 만약 '입력된 두 수의 최솟값을 구하는 함수'를 작성하여 이를 'x와 w-x', 'y와 h-y', 'min1과 min2'에 각각 적용시킨다면, 훨씬 깔끔한 코드를 작성할 수 있을 것입니다. 도전해보고 싶은 분들은 꼭 도전해보세요!

반응형