반응형
이번 문제는 기하학적인 이해만 있어도 구현하기가 편합니다.
https://www.acmicpc.net/problem/2564
모든 좌표를 기준점에서 시계방향으로 돌 때의 거리로 계산을 하면, 두 지점 사이의 거리를 계산하기 편합니다. A->B 로 가는 거리와 B->A로 가는 거리 중에 짧은 것을 선택하면 되겠죠.
제 경우에는 시계방향으로 돌 때, 왼쪽 아래를 기준점으로 하여서 계산을 했습니다. 이러면 수직선상에 한 점으로 표시될 수 있는데요. 실제 시작지점과 끝지점은 이어진 상태이기 때문에 두 지점 사이의 거리를 계산할 때 나머지 연산을 이용했습니다.
제가 작성한 소스입니다.
//------------------------------------------------
// baekjoon #2564
// - by Aubrey Choi
// - created at 2019-08-20
//------------------------------------------------
#include <stdio.h>
int CW(int p, int x, int w, int h)
{
if(p==1) return h+x;
if(p==2) return 2*(w+h)-x;
if(p==3) return h-x;
return w+h+x;
}
int main()
{
int w, h, n, store[100], p, x, sum=0;
scanf("%d%d%d",&w,&h,&n);
for(int i=0;i<n;i++) { scanf("%d%d", &p, &x); store[i]=CW(p, x, w, h); }
scanf("%d%d",&p,&x);
x = CW(p, x, w, h);
w = 2*(w+h);
for(int i=0;i<n;i++)
{
p = (store[i]-x+w)%w;
if(p*2 > w) p=w-p;
sum += p;
}
printf("%d\n", sum);
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #2567 색종이-2(구현) (0) | 2023.07.23 |
---|---|
[C/C++] 백준 #2565 전깃줄(가장 긴 증가하는 부분수열) (0) | 2023.07.19 |
[C/C++] 백준 #2553 마지막 팩토리얼 수(수학) (0) | 2023.07.08 |
[C/C++] 백준 #2529 부등호(탐욕 알고리즘) (0) | 2023.06.24 |
[C/C++] 백준 #2527 직사각형(수학) (0) | 2023.06.22 |
댓글