[파이썬][백준 1085번] 직사각형에서 탈출
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
- 단순 코딩 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) |
-
주석을 참고하면서 이해를 돕습니다.Permalink
4. 알고리즘 및 해설Permalink
- 한수의 x, y값과 w, h값을 모두 받는다.
- 이때 길이는 양수이므로 오른쪽 꼭지값의 x값, y값(왼쪽 아래보다 크므로) - 왼쪽 아래 꼭지값의 x값, y값을 구한다.
- 이후 x값과 y값에 절대값을 붙여 양수로 변환한다.
- if문을 통해 경우의 수를 계산하여 답을 도출한다.
5. 짚고 넘어가기Permalink
- abs()함수를 통해 보다 쉽게 절대값으로 바꿀 수 있다.