Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 1085 : 직사각형에서 탈출

비망노트 2021. 10. 4. 21:36

문제

한수는 지금 (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는 정수
예제입력 예제출력
6 2 10 3 1

 

⭕ 풀이

const input=require('fs').readFileSync('/dev/stdin').toString();
let [x,y,w,h]=input.split(' ').map(x=>Number(x));

let a=x;
let b=y;

if(w-x<x){
    a=w-x;
}
if(h-y<y){
    b=h-y;
}
console.log(a<b?a:b);

처음엔 이렇게 위와 아래로 가는거리를 비교해 b로 받고

왼쪽과 오른쪽으로 가는거리를 비교해서 a로 받고

이 둘중 작은값을 출력하도록 만들었는데

보다보니 굳이 위아래 좌우를 따로비교할 필요없이

Math.min을 사용하면 좀더 간결하게 표현할수 있을것같았다.

 

⭕ 다시풀이

const input=require('fs').readFileSync('/dev/stdin').toString();
let [x,y,w,h]=input.split(' ').map(x=>Number(x));
console.log(Math.min(w-x,x,h-y,y));

///////////////////////////////////////////////

let [x,y,w,h]=require('fs').readFileSync('/dev/stdin').toString().split(' ').map(x=>Number(x));
console.log(Math.min(w-x,x,h-y,y));

 

 

처음엔 문제가 무슨내용인지 머릿속에 직사각형을 그리고 상상해보았다.

하지만 내가 상상하는내용을 컴퓨터가 같이 도형을 그리며 생각하진않을테니..

그냥 상하좌우 어디로가든 제일 적게움직여 도착하는,

즉 최소값만 찾으면 되는 문제였다.

 

가끔 문제를 너무 어렵게 꼬아서 받아들여질때가있는데 

그럴때마다 처음 받아들인 내용을 다 잊고 문제를 처음본듯이 생각해보는것도 좋은것같다.

 

 

-출처

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