[백준] 2564번 경비원 (실버 1)

seulg1004·2022년 6월 24일
0

PythonAlgorisim

목록 보기
10/14

문제링크
오랜만에 블로그에 올리는 백준 문제 풀이..ㅎㅎㅎㅎㅎ
노션에는 적었지만 블로그에는 뭔가 더 어려운 문제를 올려야할 것 같아서 안올렸는데 이러다가 하나도 못올릴 것 같아서 블로그에도 올려보려고 한당

이 문제는 최단 거리를 구하는 방법만 정하면 쉽게 풀 수 있는데 문제에서 힌트가 있다..! 물론 동서남북일 때의 케이스를 모두 나누어 노가다로.. 풀 수 있지만 "시계 방향으로", "시계 반대방향으로"를 생각해보면 한 쪽 방향을 기준으로 돌리면 된다는 것을 알 수 있다.

그래서 왼쪽 위를 고정점으로 놓고 위치한 방향의 input값에 따라 거리를 조정해준다.

import sys
input = sys.stdin.readline

x, y = map(int, input().split())
total = x*2 + y*2
n = int(input())
shops = []
for _ in range(n+1):
  a, b = map(int, input().split())
  if a == 1:
    shops.append(b)
  elif a == 2:
    shops.append(x+y+(x-b))
  elif a == 3:
    shops.append(total-b)
  elif a == 4:
    shops.append(x+b)

# 동근이의 위치를 분리
home = shops[-1]
shops = shops[:-1]

이렇게 값을 받으면 알고리즘은 간결해진다. 동근이의 위치와 상점의 위치를 하나씩 비교하고 최소거리를 찾으면 끝!

def get_distance(x):
  cal = abs(home - x)
  return min(cal, total-cal)

ans = 0
for i in range(n):
  value = get_distance(shops[i])
  ans += value

print(ans)

0개의 댓글