풀이


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)

References