1) 사이트
2) 문제
저는 이 문제를 보고 최단 거리를 구하는 문제인 줄 알았지만, 어느 방면에서든 가장 가까운 거리의 직사각형의 경계선에만 닿으면 되는 문제였습니다.
그래서 제가 고려한 거리로는 출발지점(x, y)에서 1)왼쪽 2)오른쪽 3)위쪽 4)아래쪽이었습니다.
대각선은 삼각비 1:1:루트2 생각하니 대각선으로 가는 길이 더 멀다고 판단되어 위처럼 4가지로만 따져보게 되었습니다.
3) 파이썬 코드
ver1 - 복잡한 코드
x,y,w,h=map(int,input().split(' '))
#복잡한 코드
distance=[]
right=w-x
distance.append(right)
left=x-0
distance.append(left)
top=h-y
distance.append(top)
bottom=y-0
distance.append(bottom)
print(min(distance))
ver2 - 간단한 코드
x,y,w,h=map(int,input().split(' '))
#좀 더 간단하게 바꾸기!
print(min([w-x, x, y, h-y]))
사실 간단한 코드는 복잡한 코드로 성공한 뒤 혹시 몰라 서치해봤더니 해당 코드로 간단하게 줄일 수 있었습니다.
3-1) 선수 지식
파이썬 코드를 이해하기 위해 알아야 할 선수 지식이 있습니다.
1) 리스트 안에서 최소값을 구하는 방법
min()이라는 기능을 이용하면 쉽게 구할 수 있습니다.
min(리스트)로요!
리스트를 미리 만들어 넣을 수도 있지만 즉흥적으로 짜 넣을 수도 있습니다.
min([1,2,3,4]) 이렇게요! 이러면 답은 1이되겠죠.
3-2) 설명
1. 출발지점(x,y)과 직사각형의 끝 지점(w,h)을 입력 받습니다.
x,y,w,h=map(int,input().split(' '))
2. 출발지점에서 경계선까지 왼쪽/오른쪽/위/아래를 잽니다.
print(min([w-x, x, y, h-y]))
왼쪽 : 출발지점(x) - 시작지점(0) 즉, x
오른쪽 : 끝지점(w) - 출발지점(x)
위 : 끝지점(h) - 출발지점(y)
아래 : 출발지점(y) - 시작지점(0) 즉, y
이 네가지 경우의 수 가운데 가장 작은 수를 출력하면 됩니다.
4) c언어
없음
궁금한 점이나 공유할 정보가 있다면 댓글로 남겨주세요 *^^*
끝!
'알고리즘 > 백준' 카테고리의 다른 글
4153번 직각삼각형 (0) | 2021.07.23 |
---|---|
3009번 네 번째 점 (0) | 2021.07.23 |
9020번 골드바흐의 추측 (0) | 2021.07.21 |
4948번 베르트랑 공준 (0) | 2021.07.17 |
1929번 소수 구하기 (0) | 2021.07.16 |