본문 바로가기

프로그래밍/백준 문제풀이

1085. 직사각형에서 탈출 (파이썬)

300x250

1085. 직사각형에서 탈출

1085번: 직사각형에서 탈출 (acmicpc.net)

 

1085번: 직사각형에서 탈출

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

www.acmicpc.net

문제

한수는 지금 (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는 정수

최종 답:

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

 

문제풀이:

문제를 그림으로 그려보면 다음과 같다.

문제의 그래프화

제한조건에 따라 x와 y는 반드시 w-1,h-1보다 작거나 같다. 그러므로 점(x,y)는 길이가 w, 높이가 h인 사각형 안에 있다. 이 상황에서 직사각형 경계면까지 가는 거리의 최솟값은 그림에서 보이는 것처럼 x, y, h-y, w-x중 가장 작은 값이 될 것이다.

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

먼저 x, y, w, h 값을 가져온다. map(function, iteration)함수는 반복 가능한 자료형(iteration)을 함수(function)에 하나씩 넣어 수행하는 함수이다. 여기서는 input()으로 가져온 값들을 띄어쓰기를 기준으로 나누어 리스트를 만들고 이 리스트를 int함수에 하나씩 넣어 string값을 정수값으로 한번에 변환시킨다. 

물론, 하나씩 수행할 수도 있다.

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

 

두번째 줄은 이 네가지 거리 중 가장 최단거리를 고르는 코드이다.

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

 

*완성된 코드는 깃허브에 올려두었습니다.

깃허브 코드

300x250