본문 바로가기

Study/BaekJoon

[백준 자바JAVA] 1085번 - 직사각형에서 탈출

728x90

 

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


● 문제

처음에 문제만보고는 이해를 못하였지만 직접 그림판에 그려보고나서 문제를 이해하게 되었다.


주어진 점 x = 6, y = 2에서 모든 면에 닿는 거리를 계산해서 최솟값을 출력해주면된다.

기준점을 기준으로 왼쪽면에 닿는 거리는 x의 값인 6

오른쪽면에 닿는 거리는 전체 x의 값(w) 10에서 6을 뺀 4

아랫쪽면에 닿는 거리는 y의 값인 2

윗쪽면에 닿는 거리는 전체 y의 값(h) 3에서 2를 뺀 1

이므로 출력이 1이 된다. 


● 코드

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int x = s.nextInt();
		int y = s.nextInt();
		int w = s.nextInt();
		int h = s.nextInt();
		
		int min = 999;
		
		if(w - x < min)
			min = w - x;
		if(h - y < min)
			min = h - y;
		if(x < min)
			min = x;
		if(y < min)
			min = y;
		
		System.out.println(min);
		
		s.close();
	}

}

이해한 내용을 중심으로 코드를 작성하였다. min값을 정의해주고 if문을 이용하여 최솟값을 찾아

최솟값을 출력해준다.


● 참고사항

내가 작성한 코드에서 min값에 초기값을 지정해주어야 해서 큰값인 999를 지정해주어서 약간 맘에 걸렸지만 통과가 되었다.

다른 사람들은 어떻게 코드를 작성하였나 찾아보았는데 Math를 이용하여 작성한 코드를 참고하여 작성해 보았다.

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int x = s.nextInt();
		int y = s.nextInt();
		int w = s.nextInt();
		int h = s.nextInt();
		
		int x_min = Math.min(x,  w-x);
		int y_min = Math.min(y, h-y);
		
		System.out.println(Math.min(x_min, y_min));
		
		s.close();
	}

}

이런식으로 min을 활용하여 코드를 작성할 수 있다.

728x90