티스토리 뷰

 

[Python] 백준 알고리즘 온라인 저지 1085번 : 직사각형에서 탈출

 

Python3 코드

x, y, w, h = map(int, input().split())
print(min(x, y, w-x, h-y))

 

 

Python3 코드 풀이

 

1. 코드 풀이에 대한 전체적인 내용 정리

이 문제는 왼쪽 아래 꼭짓점을 (0, 0) 좌표에 두고 오른쪽 위 꼭짓점을 (w, h) 좌표에 둔 직사각형이 있다고 할 때, 직사각형 평면 내부의 어떤 점 (x, y) 좌표에서 직사각형의 경계면까지의 거리 중에서 가장 짧은 거리를 구하는 문제이다.

 

(x, y) 좌표를 임의로 지정했을 때, (x, y) 좌표에서 경계면까지의 거리를 그림으로 표현해보면 아래와 같다.

백준 1085

그림에서 나타내는 4가지 선의 식을 설명하면

- 왼쪽 아래 꼭짓점이 (0, 0)에 위치하기 때문에 y축에서 (x, y)까지의 길이는 x가 된다.

- (x, y) 좌표에서 y축과 평행하는 직사각형 우측 경기면까지는 w-x로 나타낼 수 있다.

- x축에서 (x, y)까지의 세로 길이는 y가 된다.

- (x, y)좌표에서 x축과 평행하는 직사각형 윗 경계면까지의 겨리는 h-y로 나타낼 수 있다.

 

이 문제를 풀 때 (x, y) 좌표에서 대각선 경계면까지의 경로에서 대각선은 고려하지 않아도 된다. (x, y) 좌표가 직사각형 내부의 어느 위치에 있건 x축, y축과 평행하는 위 그림과 같은 4가지의 거리만 구하면 (x, y) 좌표에서 대각선의 경계면까지의 가장 짧은 거리는 4개 중에 하나에 해당하게 되기 때문이다.

 

위와 같이 (x, y) 좌표에서 경계면까지의 거리 4가지만 정리를 하고 나면 코드는 간단히 작성할 수 있다. 

 

2. 코드 첫째줄

x, y, w, h = map(int, input().split())

입력받는 4개의 숫자를 문자에 주어진 순서대로 x, y, w, h 변수에 선언하였다. 이때, input 함수로 입력받고 split 한 4개의 문자열은 map 함수를 이용해서 int 타입으로 변환하였다. map 함수를 사용하지 않는 경우 4개의 변수를 각각 int 타입으로 변환할 수도 있지만 한 번에 변환하는 게 간편해서 map 함수를 사용했다. map 함수를 사용하지 않는다면 코드는 아래와 같다.

x, y, w, h = input().split()
x = int(x)
y = int(y)
w = int(w)
h = int(h)

map 함수에 대한 사용예시는 이전 포스팅에 정리해둔 적이 있어서 혹시나 필요하신 분들을 위해 링크를 걸어둔다. ▶map 함수의 설명 및 사용예시

 

3. 코드 둘째 줄

print(min(x, y, w-x, h-y))

4개의 거리 중 가장 짧은 거리는 min 함수를 이용해서 구했다.

 

min함수는 min(iterable) 형태로 사용한다. 괄호( ) 안에 문자열, 리스트와 같은 반복 가능한 iterable 자료형을 입력하면 요소들 중 최솟값을 반환한다.

 

반응형
댓글
반응형