백준 1085 직사각형에서 탈출[JAVA]

Ga0·2023년 3월 25일
0

baekjoon

목록 보기
7/123

"이 문제는 어려운 문제는 아니지만, 문제를 제대로 안읽고 (x, y)에서 (w, h)까지의 거리를 구하는 문제인줄 알고 처음에 당황했기 때문에 앞으로는 문제를 잘 읽자는 의미로 포스트를 하게 되었다."

문제 해석

  • 처음에 이해한 것은 왼쪽과 같아서, 예제 답이 맞지 않아 다시 문제를 읽고 다시 이해했다.
  • 오른쪽 그림이 이 문제의 핵심(해석)이다.
    • 직사각형의 탈출은 쉽게 말해 (x, y)좌표에서 직사각형의 경계선(직사각형의 꼭짓점이든, 변이든)으로가면 되는 것!
    • 이 문제는 이 설명이 끝이다.

코드1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer token = new StringTokenizer(br.readLine());
        br.close();

        int x = Integer.parseInt(token.nextToken());
        int y = Integer.parseInt(token.nextToken());
        int w = Integer.parseInt(token.nextToken());
        int h = Integer.parseInt(token.nextToken());
        
        //직사각형의 경계선까지 가는 거리[w, h로 가는 거리가 아니다.]
        int x_axisMin = findMin(x, w-x);
        int y_axisMin = findMin(y, h-y);

        System.out.println(y_axisMin > x_axisMin ? x_axisMin : y_axisMin);
    }
        
    //최솟값을 찾는 메서드
    static int findMin(int m, int n){
        if(m >= n){
            return n;
        }else{ //m이 더 작을때
            return m;
        }
    }
}
  • 사실 코드 설명이 위의 문제해석 사진과 같아서 달리 설명할 것은 없다.

결과1

코드2

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

import static java.lang.Math.min;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer token = new StringTokenizer(br.readLine());
        br.close();

        int x = Integer.parseInt(token.nextToken());
        int y = Integer.parseInt(token.nextToken());
        int w = Integer.parseInt(token.nextToken());
        int h = Integer.parseInt(token.nextToken());
        
        //직사각형의 경계선까지 가는 거리[w, h로 가는 거리가 아니다.]
        int x_axisMin = min(x, w-x);
        int y_axisMin = min(y, h-y);

        System.out.println(min(x_axisMin, y_axisMin));
    }

}
  • 이 코드는 Math 클래스에 존재하는 min메서드를 사용한 버전이다.

결과2

  • Math클래스의 min()메서드를 사용할때가 좀 더 빠른 것을 확인할 수 있다.

느낀점

  • 요즘 문제를 읽을때 주로 제목만 읽고 유추해서 푸는 경우가 허다한데, 진짜 고쳐야지 싶었다.
  • 사실 그거 말고는 느낀점이라고 할만한게 없다.... ;)

0개의 댓글