[백준 문제 풀이] 1085번 직사각형에서 탈출

Junu Kim·2025년 7월 18일
0
post-thumbnail

[1085] 직사각형에서 탈출

난이도: ★☆☆☆☆ • solved on: 2025-07-18


문제 요약

  • 문제 유형: 수학, 구현
  • 요구사항: (x, y)에 위치한 사람이 직사각형의 경계선까지 최소 거리를 구해야 한다. 단, 직사각형은 (0,0)에서 (w,h)까지의 범위를 갖는다.

사용 개념

  1. 자료구조

    • 정수형 변수 (int): 좌표와 너비/높이 값 저장
  2. 알고리즘/기법

    • 최소값 계산: Math.min() 사용
    • 단순 비교 및 조건문 분기
  3. 핵심 키워드

    • 경계까지의 거리 계산
    • 최솟값 비교 (최단 거리)

풀이 아이디어

  1. 문제 분해
    • (x, y)에서 직사각형 경계까지의 거리는 총 4가지 경우:
      • 왼쪽: x
      • 오른쪽: w - x
      • 아래쪽: y
      • 위쪽: h - y
    • 이 중 가장 짧은 거리를 출력하면 된다.
  2. 핵심 로직 흐름
    입력: x, y, w, h
    왼쪽 거리 = x
    오른쪽 거리 = w - x
    아래쪽 거리 = y
    위쪽 거리 = h - y
    minX = Math.min(x, w - x)
    minY = Math.min(y, h - y)
  3. 예외 처리
    • 없음 (모든 값은 1 이상 1,000 이하이므로 일반적인 조건 처리만 하면 됨)

코드

import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] list = br.readLine().split(" ");
        int x = Integer.parseInt(list[0]);
        int y = Integer.parseInt(list[1]);
        int w = Integer.parseInt(list[2]);
        int h = Integer.parseInt(list[3]);
        int minX = Math.min(x, w - x);
        int minY = Math.min(y, h - y);
        if (minX < minY) {
            System.out.println(minX);
        } else {
            System.out.println(minY);
        }
    }
}

시간·공간 복잡도

  • 시간 복잡도: O(1) — 단순 수식 계산
  • 공간 복잡도: O(1)

어려웠던 점

  • 입력을 문자 배열로 받을 때 toCharArray() 를 사용하는 습관 때문에, 공백이 포함된 문자열에서 오작동이 발생했다. 이번 문제에서는 split(" ") 으로 공백 기준 분리하는 것이 적절했다.
  • 좌표가 작아보여도 "경계까지의 거리"는 4방향을 모두 고려해야 한다는 점을 문제 조건으로부터 명확히 유추해야 함.

배운 점 및 팁

  • 문자 기반 입력이 필요한 상황인지, 문자열 분할이 적절한지 판단 후 toCharArray() vs split() 을 적절히 선택해야 한다.
  • 사각형 내부에서 탈출 거리 계산 문제는 경계선까지의 거리 중 최소값을 찾는 방식으로 단순하게 접근할 수 있다.
  • Math.min() 을 중첩 사용하면 간단하게 여러 값 중 최소를 구할 수 있다.

참고 및 링크


추가 연습 문제

profile
생각이 현실이 될 수 있도록 노력하는 중입니다.

0개의 댓글