최대 1 분 소요

1. 문제Permalink

[Bronze III] 직사각형에서 탈출 - 1085Permalink

문제 링크

성능 요약Permalink

메모리: 30864 KB, 시간: 68 ms

분류Permalink

기하학(geometry), 수학(math)

문제 설명Permalink

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

입력Permalink

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

출력Permalink

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

출처: 백준, https://https://www.acmicpc.net/

2. 해결방법 시간복잡도Permalink

  1. 단순 코딩 O(1)

3. 문제 해결 및 코드Permalink


x, y, w, h = map(int, input().split()) # 지표상의 한수 (x,y) 값과 우측 상단 꼭지점 (w, h)
wide = w - x # 거리는 무조건 +이므로 절대값 구현
height = h - y # 거리는 무조건 +이므로 절대값 구현
x = abs(x) # 거리는 무조건 +이므로 절대값 구현
y = abs(y) # 거리는 무조건 +이므로 절대값 구현
if wide <= height and wide <= x and wide <= y: # 직사각형에서 한수 x의 거리 계산값
print(wide)
elif height <= wide and height <= x and height <= y: # 직사각형에서 한수 y의 거리 계산값
print(height)
elif x <= wide and x <= height and x <= y: # 원점으로부터 한수 x의 거리 계산값
print(x)
elif y <= wide and y <= height and y <= x: # 원점으로부터 한수 y의 거리 계산값
print(y)
view raw 1085.py hosted with ❤ by GitHub
  • 주석을 참고하면서 이해를 돕습니다.Permalink

4. 알고리즘 및 해설Permalink

  1. 한수의 x, y값과 w, h값을 모두 받는다.
  2. 이때 길이는 양수이므로 오른쪽 꼭지값의 x값, y값(왼쪽 아래보다 크므로) - 왼쪽 아래 꼭지값의 x값, y값을 구한다.
  3. 이후 x값과 y값에 절대값을 붙여 양수로 변환한다.
  4. if문을 통해 경우의 수를 계산하여 답을 도출한다.

5. 짚고 넘어가기Permalink

  1. abs()함수를 통해 보다 쉽게 절대값으로 바꿀 수 있다.