티스토리 뷰

Solved.ac Class 완전정복 프로젝트

Class : 2 ~ 2 ++

 


끝나지 않던 lv1 문제를 다 풀고.. 드디어 lv2에 입성했습니다~ (짝짝짝)

아직 못올린 lv1문제들은 추후에 정리해서 올라갈 예정입니다. 그럼 오늘도 코테 준비하시는 모든 분들 파이팅입니다!

 

링크

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

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net

문제

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

입력
첫째 줄에 x, y, w, h가 주어진다.

출력
첫째 줄에 문제의 정답을 출력한다.

접근방법

(0,0) , (0, h) , (w,0) , (w, h) 이렇게 4 꼭짓점이 있는 직사각형과 좌표 (x, y)가 존재하는 것이다. 

좌표와 직사각형 변(꼭짓점 포함)과 만나는 최솟값을 구하는 것이 이 문제이다.

문제에서는 변이 좌표축과 평행하다는 단서를 붙여주었다.

그 말은 즉슨, 최솟값이 대각선이 아니란 의미이다! (풀이 그림 참조)

그러므로, 거리라는 말을 듣고 피타고라스 정리가 생각났다면, 다시 흘려보내 주면 된다.

축과 평행한 직선이기 때문에, 가로나 세로에 최솟값을 알아내야 한다는 것까지는 생각하고 코드에 임해야 한다. 

 

풀이

예제를 한번 상상해보자.

좌표 하나(6,3)와 양 꼭짓점이 (0,0), (10,3)인 사각형이다.

예제를 그려본 결과

파란색 줄은 y를 기준으로 가장자리에 갈 수 있는 값이다.  아랫변으로 가면 2, 윗변으로 가면 1

빨간색 줄은 x를 기준으로 가장자리에 갈 수 있는 값이다. 왼쪽 변으로 가면 6, 오른쪽 변으로 가면 4

 

이를 통해 알 수 있는 것은 x든, y든 주변과의 차이가 작은 값이 답이라는 것이다.

x에서 좌우 비교, y에서 상하 비교 후 가장 작은 값을 출력하면 답이 된다.

 

코드

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Main test = new Main();
    }

    public Main(){
        Scanner sc = new Scanner(System.in);
	//입력
        int x = sc.nextInt();
        int y = sc.nextInt();
        int w = sc.nextInt();
        int h = sc.nextInt();
        
        
        int answer = solution(x,y,w,h);
        
	//출력
        System.out.println(answer);

    }

    private int solution(int x, int y, int w, int h) {
        int min = 9999999;
	//x를 기준으로 좌우 비교
        if( Math.abs(x-w) <x){
            min=Math.abs(x-w);
        }else{
            min =x;
        }
	//y를 기준으로 상하 비교, 또한 x에서 구한 최솟값과 비교
        if( (Math.abs(y-h) < y) && Math.abs(y-h) < min  ){
            min = Math.abs(y-h);
        }else if( y < min){
            min= y;
        }

        return min;
    }

}

 

결과

 

 

 

포스팅에 문제가 있거나, 설명이 잘못된 부분 지적 환영합니다.

읽어주셔서 감사합니다. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함