알고리즘/백준

[백준`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