728x90
문제
한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다.
직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 x, y, w, h가 주어진다.
제한
・ 1 ≤ w, h ≤ 1,000
・ 1 ≤ x ≤ w-1
・ 1 ≤ y ≤ h-1
・ x, y, w, h는 정수
출력
첫째 줄에 문제의 정답을 출력한다.
Python3 소스코드
# 백준 1085 (직사각형에서 탈출)
x, y, w, h = input().split()
# 문제에서 요구하는 범위를 벗어났을 경우 오류처리
if (1 <= int(w) <= 1000 and 1 <= int(h) <= 1000) is False:
print("Not correct input, Retry")
# 시작위치가 경계선에 해당한다면 움직이지 않아도 되는 상태
elif int(x) == 0 or int(y) == 0 or int(x) == w or int(y) == h:
print(0)
else:
goWidth = min(int(w) - int(x), int(x))
goHeight = min(int(h) - int(y), int(y))
print(min(goWidth, goHeight))
문제에서 말하는 직사각형의 경계선은 테두리를 의미합니다.
좌표 (x,y)는 두 가지의 경우를 가집니다.
① 경계선까지 움직여야 하는 경우
좌표의 이동은 가로와 세로 중 가장 짧은 거리에 해당하는 방향으로 이동하면 됩니다.
② 시작 좌표가 이미 경계선에 위치한 경우
움직일 필요가 없기 때문에 0의 값을 가집니다.
if 문은 처음으로 입력받는 w와 h의 값이 문제에서 요구하는 값의 범위와 일치하는지 확인합니다.
다음의 elif 문은 x와 y가 이미 경계선에 포함되어있는지를 확인합니다.
마지막 else 문은 가로나 세로 중에서 가장 가까운 방향의 거리를 계산하여 출력합니다.
- 끝 -
728x90
'작업 > Problem Solving' 카테고리의 다른 글
백준 4153(직각삼각형) 파이썬(python) 해결 (0) | 2020.12.26 |
---|---|
백준 3009(네 번째 점) 파이썬(python) 해결 (0) | 2020.12.26 |
백준 9020(골드바흐의 추측) 파이썬(python) 해결 (0) | 2020.12.25 |
백준 4948(베르트랑 공준) 파이썬(python) 해결 (0) | 2020.12.25 |
백준 1978(소수 찾기) 파이썬(python) 해결 (0) | 2020.09.10 |