-
[백준] 2564 - 경비원알고리즘 2023. 5. 16. 17:42728x90
1. 문제
https://www.acmicpc.net/problem/2564
2564번: 경비원
첫째 줄에 블록의 가로의 길이와 세로의 길이가 차례로 주어진다. 둘째 줄에 상점의 개수가 주어진다. 블록의 가로의 길이와 세로의 길이, 상점의 개수는 모두 100이하의 자연수이다. 이어 한 줄
www.acmicpc.net
2. 접근
1. 문제가 하고자 하는 말은 동근이의 입장에서 특정 상점들까지 가는데 시계방향이 빠르냐 반시계 방향이 빠르냐를 구분하면 되는 것이다.
2. (0,0) 지점을 기준으로 시계방향으로 이동한다고 기준을 잡고, 동서남북에 위치해 있는 상점들에 들리면서 거리를 구한다.
3. 가장 마지막에 동근이의 위치가 나오니까 len(res) - 1 의 범위를 갖고 모든 상점을 res[-1]과 비교해서 반시계, 시계 방향 둘 의 값중 min값의 값을 구하면 된다
3. 풀이
# 2564 실버 1 import sys input = sys.stdin.readline m,n = map(int,input().split()) def distance(x,y): if x == 1: return y if x == 2: return 2*m+n-y if x == 3: return 2*(m+n) - y if x == 4: return m+y res = [] for i in range(int(input())+1): x,y = map(int,input().split()) res.append(distance(x,y)) #print(res) cnt = 0 for i in range(len(res)-1): dist = abs(res[-1] - res[i]) cnt += min(dist, 2*(n+m)-dist) print(cnt)
'알고리즘' 카테고리의 다른 글
[백준] 1235 - 학생 번호 (0) 2023.05.17 [백준] 2002 - 추월 (0) 2023.05.17 [백준] 2960 - 에라토스테네스의 체 (0) 2023.05.16 [백준] 2503 - 숫자야구 (0) 2023.05.15 [백준] 2331 - 반복 수열 (0) 2023.05.15