백준 2564번 파이썬

정재혁·2022년 7월 24일
0

백준 2564번 경비원

문제


입력 및 출력 값


풀이:

해당 문제는 상점과 본인의 위치를 비교해 구현할 수 있는 모든 경우의 수를 다 계산해서 코드화 해야 하는 문제였다. 처음 문제를 접했을 때 직선 거리와 직각 삼각형을 활용해 문제를 풀려고 했으나 본인의 위치가 확정적이지 않기 때문에 풀 수 없음을 이해하고 다음과 같은 방법으로 문제를 풀었다.


코드:

row, col = map(int, input().split())
ea = int(input())
lst = [list(map(int,input().split())) for _ in range(ea)]

my = list(map(int,input().split()))
ans = 0

for x in lst:
    if my[0] == 1:
        if x[0] == 1:
            dist = abs(x[1] - my[1])
        elif x[0] == 2:
            dist = col + min(x[1] + my[1], 2 * row - x[1] - my[1])
        elif x[0] == 3:
            dist = x[1] + my[1]
        elif x[0] == 4:
            dist = (row - my[1]) + x[1]
    elif my[0] == 2:
        if x[0] == 1:
            dist = col + min(x[1] + my[1], 2 * row - x[1] - my[1])
        elif x[0] == 2:
            dist = abs(x[1] - my[1])
        elif x[0] == 3:
            dist = (col - x[1]) + my[1]
        elif x[0] == 4:
            dist = (col - x[1]) + (row - my[1])

    elif my[0] == 3:
        if x[0] == 1:
            dist = x[1] + my[1]
        elif x[0] == 2:
            dist = x[1] + (col - my[1])
        elif x[0] == 3:
            dist = abs(x[1] - my[1])
        elif x[0] == 4:
            dist = row + min(x[1] + my[1], 2 * col - x[1] - my[1])
    else:
        if x[0] == 1:
            dist = (row - x[1]) + my[1]
        elif x[0] == 2:
            dist = (row - x[1]) + (col - my[1])
        elif x[0] == 3:
            dist = row + min(x[1] + my[1], 2 * col - x[1] - my[1])
        elif x[0] == 4:
            dist = abs(x[1] - my[1])

    ans += dist

print(ans)
profile
저는 정재혁임니다^___^

0개의 댓글