알고리즘/백준
[백준`S1] 2564 - 경비원 (Python)
셰욘
2024. 3. 5. 03:18
728x90
문제 설명
https://www.acmicpc.net/problem/2564
2564번: 경비원
첫째 줄에 블록의 가로의 길이와 세로의 길이가 차례로 주어진다. 둘째 줄에 상점의 개수가 주어진다. 블록의 가로의 길이와 세로의 길이, 상점의 개수는 모두 100이하의 자연수이다. 이어 한 줄
www.acmicpc.net
문제 풀이
처음에는 2차원 배열로 풀라고 했는데...
배열 인덱스들이 너무 헷갈려서 끙끙대고 있을 때 같이 푸는 친구에게 아이디어를 듣고 풀어보았다
2차원 배열로 생각하지 말고, 사각형을 일자로 쭉- 펴서 풀어보라는 것
그렇게 1차원 배열로 생각해서 풀었더니 쉽게 풀렸다!
w, h = list(map(int, input().split()))
n = int(input())
store = [list(map(int, input().split())) for _ in range(n)]
dong = list(map(int, input().split()))
# 좌표를 입력 받아 1차원 배열(0부터의 거리)로 반환하는 함수
def cnt(a, b):
ret = 0
if a == 1: # 북
ret = b
elif a == 2: # 남
ret = w * 2 + h - b
elif a == 3: # 서
ret = (w * 2 + h * 2) - b
elif a == 4: # 동
ret = b + w
return ret
d = cnt(dong[0], dong[1])
result = 0
for i in range(n):
x, y = store[i]
s = cnt(x, y)
if s >= d: # 동근이의 위치보다 가게가 더 멀리 있을 때
result += min(s - d, d + (w + h) * 2 - s)
else: # 동근이의 위치보다 가게가 더 가까이 있을 때
result += min(d - s, (w + h) * 2 - d + s)
print(result)
728x90