한수는 지금 (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는 정수
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
int w = scan.nextInt();
int h = scan.nextInt();
PriorityQueue<Integer> arr = new PriorityQueue<>();
arr.add(x);
arr.add(w - x);
arr.add(y);
arr.add(h - y);
System.out.println(arr.peek());
}
}
우선순위 큐
를 알면 쉽게 풀 수 있다. 우선순위 큐는.... 자료구조에 정리를 해야하는데... 귀찮아서 아직까지 미루고 있다... 공부하는건 쉬운데 공부한걸 정리해두는게 젤 귀찮다.. 그래서 깃허브에 커밋한 문제들은 많은데 풀이 올리는게 엄청 밀려있다ㅠ퓨ㅠㅠ
하여튼 우선순위 큐를 간단하게 설명하면 들어간 순서에 상관없이 우선순위가 높은 데이터가 먼저 나오는 것이다.
사각형이 있고, 그 안에 좌표 (x, y)
가 있다. 좌표에서 아래쪽 경계선까지 가는 거리는? x
값과 같다. 그렇다면 좌표에서 위쪽 경계선까지 가는 거리는 w - x
와 같다. 같은 방식으로 왼쪽 오른쪽 경계선까지 가는 거리를 구해준다. 그 넷 중 가장 작은 값을 꺼내면 된다. 우선순위 큐에서 우선순위가 가장 높은 값을 꺼내는 peek()
메소드를 사용해서 최솟값을 꺼내어 출력한다.