[Python] BOJ 2564 - 경비원
728x90
반응형
https://www.acmicpc.net/problem/2564
# 단순 구현문제이다. 여러가지 Case를 나누어 주고 구현하면 된다.
# 만약 동근이와 상점이 북쪽, 남쪽에 있는경우는 2가지로 더 나누어주면 되는데,
동근이가 북쪽에 있고, 상점이 남쪽에 있을때 a와 b값에 따라 최단거리가 달라진다. (아래그림 참고)
a+b가 w보다 작으면 answer에 a+b+h를 더해주고 아니면, w-a+w-b+h를 더해준다.
동쪽, 서쪽에 있는 경우도 마찬가지이다. w대신 h, h대신 w를 넣어주면된다.
# 마주보고 있는 경우가 아닌 경우는 하나하나 케이스를 다 나누어줘서 answer에 더해주었다.
import sys
input = sys.stdin.readline
w, h = map(int,input().split())
n = int(input())
xlist, ylist = [], []
def solve(xlist, ylist):
answer = 0
for i in range(n):
if sx == xlist[i]:
answer += abs(sy - ylist[i])
elif (sx, xlist[i]) == (1, 2) or (sx, xlist[i]) == (2, 1):
if sy + ylist[i] < w:
answer += sy + ylist[i] + h
else:
answer += w-sy + w-ylist[i] + h
elif (sx, xlist[i]) == (3, 4) or (sx, xlist[i]) == (4, 3):
if sy + ylist[i] < h:
answer == sy + ylist[i] + w
else:
answer += h-sy + h-ylist[i] + w
elif (sx, xlist[i]) == (1, 3) or (sx, xlist[i]) == (3, 1):
answer += sy + ylist[i]
elif (sx, xlist[i]) == (1, 4):
answer += w-sy + ylist[i]
elif (sx, xlist[i]) == (4, 1):
answer += sy + w-ylist[i]
elif (sx, xlist[i]) == (2, 3):
answer += sy + h-ylist[i]
elif (sx, xlist[i]) == (3, 2):
answer += h-sy + ylist[i]
elif (sx, xlist[i]) == (2, 4) or (sx, xlist[i]) == (4, 2):
answer += w-sy + h-ylist[i]
return answer
for _ in range(n):
x, y = map(int,input().split())
xlist.append(x)
ylist.append(y)
sx, sy = map(int,input().split())
print(solve(xlist, ylist))
(solve.ac 티어: 실버 1)
728x90
반응형
'문제풀이 > BaekjoonOnlineJudge' 카테고리의 다른 글
[Python] BOJ 2023 - 신기한 소수 (0) | 2021.10.03 |
---|---|
[Python] BOJ 20003 - 거스름돈이 싫어요 (0) | 2021.10.02 |
[Python] BOJ 14725 - 개미굴 (0) | 2021.09.29 |
[Python] BOJ 21610 - 마법사 상어와 비바라기 (0) | 2021.09.28 |
[Python] BOJ 17390 - 이건 꼭 풀어야 해! (0) | 2021.09.26 |
TAGS.