[백준] 2564번 경비원 - 파이썬/구현

JinUk Lee·2023년 1월 26일
0

백준 알고리즘

목록 보기
27/78

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



M,N = map(int,input().split())

S = int(input())

S_list = []

for i in range(S):

    P,A = map(int,input().split())
    S_list.append((P,A))

Dong_P,Dong_A = map(int,input().split())

ans = 0

for i in S_list:

    if Dong_P == 1:
        dis = N+N+M+(M-Dong_A)
    elif Dong_P == 2:
        dis = N+Dong_A
    elif Dong_P == 3:
        dis = Dong_A
    else:
        dis = N+M+(N-Dong_A)

    if i[0] == 1:
        dis_i = N+N+M+(M-i[1])
    elif i[0] == 2:
        dis_i = N+i[1]
    elif i[0] == 3:
        dis_i = i[1]
    else:
        dis_i = N+M+(N-i[1])

    len_T = 2*(N+M)

    real_dis = abs(dis-dis_i)

    if real_dis>=(N+M):
        real_dis = len_T - real_dis


    ans+=real_dis

print(ans)

A가 상점의 위치, B가 경비원의 위치라고 할때

특정 점(0,0)을 기준으로 한 방향으로의 거리를 측정한다. (파란색과 보라색)

그리고 두 거리의 차를 구하면 이동거리가 나오는데, 이 이동거리가 짧은 방향인지 긴 방향인지 알 수 없다.

그런데 전체 길이를 알고있으므로 우리가 구한 길이가 긴 방향이라고 해도 짧은 방향을 구할 수 있다.

profile
개발자 지망생

0개의 댓글