티스토리 뷰

Problem & Solving/Beakjoon judge

[2564] 경비원

성호스 2018. 2. 18. 17:38

문제 출처 : https://www.acmicpc.net/problem/2564

분류 : 구현


백준 2564 경비원

최소 거리 구하기


구현 포인트

1) 특정 점을 기준으로 위치를 다시 표현

동, 서, 남, 북에 따라 점의 위치를 따로 다루기에는 코드가 길어지고 복잡해 지므로

조금만 더 생각해 보면 왼쪽 상단을 0으로 두고, 시계방향으로 각 점들의 위치를 나타내면 간단해 진다.


코드는 아래 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdio>
#include <cmath>
int main() {
    int w, h, n, sum=0;
    scanf("%d %d %d"&w, &h, &n);
    int d, o, *= new int[n+1];
    for (int i = 0; i <= n; i++) {
        scanf("%d %d"&d, &o);
        switch (d) {
        case 1: a[i] = o; break;
        case 2: a[i] = 2 * w + h - o; break;
        case 3: a[i] = 2 * (w + h) - o; break;
        case 4: a[i] = w + o; break;
        }
    }
    for (int i = 0; i<n; i++) {
        int tmp = abs(a[i] - a[n]);
        sum += (tmp<(w + h))? tmp:2*(w + h)-tmp;
    }
    printf("%d\n", sum);
}
cs


'Problem & Solving > Beakjoon judge' 카테고리의 다른 글

[8983] 사냥꾼  (0) 2018.02.20
[2602] 돌다리 건너기  (0) 2018.02.20
[1068] 트리  (0) 2018.02.18
[2491] 수열  (0) 2018.02.17
[11403] 경로찾기  (0) 2018.02.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함