본문 바로가기
Baekjoon Algorithm/python

[Python] BAEKJOON 1085번 직사각형에서 탈출

by SeolLab. 2022. 12. 22.
728x90

 

 

https://www.acmicpc.net/problem/1085 

 

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는 정수

예제 입력 1 

6 2 10 3

예제 출력 1 

1

예제 입력 2 

1 1 5 5

예제 출력 2 

1

예제 입력 3 

653 375 1000 1000

예제 출력 3 

347

예제 입력 4 

161 181 762 375

예제 출력 4 

161

 

 

 

 sol1)

y축으로부터의 거리, x축으로부터의 거리, y축과 평행한 상단 경계선까지의 거리, x축과 평행한 상단 경계선까지의 거리 

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

sol1)은 정말 간결하다. 다른 유저들 역시 이렇게 풀었고, 32ms가 걸리는데, 나만 36ms다. 왜지?

 

sol2) 

x,y가 직사각형의 중앙부분 기준으로 얼마나 치우쳤는지에 따라 if와 else문을 만들어 list에 포함시킨다. 만약 중앙에서 왼쪽 부분에 있다면 해당 x또는 y좌표를, 오른쪽 부분에 있다면 w-x 또는 h-y를 lst에 추가한다. ('kangji3378'님의 코드를 참고.)

import sys
input = sys.stdin.readline
x,y,w,h=map(int,input().split())
lst=[]
if w//2<x:
    lst.append(w-x)
else:
    lst.append(x)
if h//2<y:
    lst.append(h-y)
else: 
    lst.append(y)
print(min(lst))

이상하게도 내가&nbsp; sol2) pypy3로 풀면, 90ms언저리가 아니라 100ms가 훌쩍 넘는다.

이제 그만해야지... 

 

 

 

 

 

#썸네일 사진 출처: 게티이미지뱅크

댓글