https://www.acmicpc.net/problem/2564
생각
(0,0)에서 시작하여 직사각형을 시계방향으로 둘레를 쭉 펼쳐줬다고 생각하여 거리를 측정해줍니다. 상점의 좌표가 x이고 북쪽이면 거리는 x, 동쪽이면 거리는 C+x, 남쪽이면 C+R+(C-x), 서쪽이면 C+R+C+(R-x) 입니다.
(0,0) ~ 상점거리와 (0,0) 동근이의거리를 시계방향만큼 측정해줬기 때문에 반시계방향으로 거리를 측정할때는 둘레 - 시계방향으로 측정한 거리값입니다.
각 상점의 거리에 대해 반복문을 돌면서 동근이의 위치와 상점의 거리를 시계방향, 반시계방향으로 비교한 다음 최소값을 찾아주면 됩니다.
Java Code
package com.java.algorithm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_2564_경비원_Re {
static int R,C,N;
static int[] info;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
C = Integer.parseInt(st.nextToken());
R = Integer.parseInt(st.nextToken());
N = Integer.parseInt(br.readLine());
info = new int[N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
// 1 2 3 4 북 남 서 동
// (0,0) -> 시계방향으로
switch (a) {
case 1: // 북
info[i] = b;
break;
case 2: // 남
info[i] = C+R+(C-b);
break;
case 3: // 서
info[i] = C+R+C+(R-b);
break;
case 4: // 동
info[i] = C+b;
break;
}
}
st = new StringTokenizer(br.readLine(), " ");
int dir = Integer.parseInt(st.nextToken());
int loc = Integer.parseInt(st.nextToken());
int total = 0; //도착지까지 가야하는 길이
switch (dir) {
case 1: // 북
total = loc;
break;
case 2: // 남
total = C+R+C-loc;
break;
case 3: // 서
total = C+R+C+R-loc;
break;
case 4: // 동
total = C+loc;
break;
}
System.out.println(solve(total));
}
private static int solve(int total) {
int ans = 0;
int clockwise = 0;
for (int i = 0; i < N; i++) {
clockwise = Math.abs(total-info[i]);
//시계방향 vs 반시계방향 큰거 찾기
ans += Math.min(clockwise, 2*(R+C)-(clockwise));
}
return ans;
}
}
'Algorithm' 카테고리의 다른 글
[백준] JAVA - 17471. 게리맨더링 (0) | 2021.04.16 |
---|---|
[SWEA] JAVA - 1953. [모의 SW 역량테스트] 탈주범 검거 (0) | 2021.04.15 |
[백준] JAVA - 17144. 미세먼지 안녕! (0) | 2021.04.14 |
[백준] JAVA - 7576. 토마토 (0) | 2021.04.13 |
[SWEA] JAVA - 1249. 보급로 (0) | 2021.04.12 |