풀이
2차원 배열을 생성한 뒤 좌표값을 설정해서 탐색을 통해 구해야하나 싶었지만 생각보다 쉬운 접근이 가능했다.
모든 위치의 거리를 [0, 0] 을 기준으로 절대값으로 저장해준 뒤 경비의 위치와의 차를 구하면됐다.
입력받은 값들을 조건에 따라 [0, 0] 부터의 거리를 계산한 후 distance 리스트에 저장한다.
저장된 리스트에서 제일 마지막 값인 경비의 위치를 기준으로 각 원소들의 차를 구해준다.
이 때 시계방향과 반시계방향을 모두 고려해야하기 때문에 전체 둘레에서 값을 빼준 거리 역시 고려하여 최소값을 ans 에 더해주면된다.
소스코드
# 경비원
import sys
input = sys.stdin.readline
def dist(i, j):
if i == 1:
return j
elif i == 2:
return w + h + w - j
elif i == 3:
return w + h + w + h - j
else:
return w + j
w, h = map(int, input().split())
distance = []
for _ in range(int(input())+1):
i, j = map(int, input().split())
distance.append(dist(i, j))
ans = 0
for d in distance[:-1]:
cw = abs(distance[-1] - d)
ccw = (w+h)*2 - cw
ans += min(cw, ccw)
print(ans)