백준 2564번 경비원 파이썬

박슬빈·2021년 9월 17일
0

알고리즘

목록 보기
18/40

문제

입력 , 출력

solution

n, m = map(int, input().split())
a = int(input())
arr = []


def res_sum(x1, y1, x2, y2):
    if x1 == 1:
        if x2 == 1:
            return abs(y1 - y2)
        if x2 == 2:
            return min((y1 + y2 + m), ((2 * n) + m - y1 - y2))
        if x2 == 3:
            return y1 + y2
        if x2 == 4:
            return n - y1 + y2
    if x1 == 2:
        if x2 == 1:
            return min((y1 + y2 + m), ((2 * n) + m - y1 - y2))
        if x2 == 2:
            return abs(y1 - y2)
        if x2 == 3:
            return y1 + m - y2
        if x2 == 4:
            return n + m - y1 - y2
    if x1 == 3:  #서쪽
        if x2 == 1:  #북
            return y1 + y2
        if x2 == 2:  #남
            return m - y1 + y2
        if x2 == 3:  #서
            return abs(y1 - y2)
        if x2 == 4:  #동
            return min((y1 + y2 + n), ((2 * m) + n - y1 - y2))
    if x1 == 4:  #동
        if x2 == 1:  #북
            return n + y1 - y2  #
        if x2 == 2:  #남
            return m - y2 + n - y1
        if x2 == 3:  #서
            return min((y1 + y2 + n), ((2 * m) + n - y1 - y2))
        if x2 == 4:  #동
            return abs(y1 - y2)


for i in range(a):
    b, c = map(int, input().split())
    arr.append((b, c))
x, y = map(int, input().split())
res = 0
for i in arr:
    res += res_sum(x, y, i[0], i[1])
print(res)

설명

완전 하드코딩했다... 오류찾기가 너무 힘들었다
조건별로 북,남 서,동 일경우에만 시계,반시계 중에
가까운것으로 return을 해주고 아닐경우에는
시계 , 반시계 중에서 가까운곳을 고정해서 return을 해줬다.

후기

하드코딩하는것보다 규칙찾기가 더 귀찮았다..
아무튼 맞았습니다.

시간복잡도로 O(n)으로 끝나서 그냥 하드코딩을 했다.

profile
이것저것합니다

0개의 댓글