반응형
문제 이해 |
예를 들어 가로의 길이가 10, 세로의 길이가 5인 블록의 경계에 무인 경비를 의뢰한 3개의 상점이 있다고 하자. <그림 1>과 같이 이들은 1, 2, 3으로 표시되어 있고, 동근이는 X로 표시한 위치에 있다.![]() |
아이디어 |
시계방향대로 거리를 구하고 마지막에 반시계방향이랑 비교해서 더 작은 값을 지정한다. 참고로 반시계방향은 전체거리 - 시계방향하면 된다. 북쪽 ![]() 동쪽 ![]() ![]() ![]() |
코드 |
package bj.silver;
import java.io.*;
import java.util.*;
/*
* 시계 방향일때
* 1: 북 -> val
* 2: 남 -> N*2 + M - val
* 3: 서 -> 2(M+N) - val
* 4: 동 -> N + val
* 반시계 방향일 때 위치 = 2(M+N)-시계방향일때 위치
*/
public class bj_2564_S1 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());// 세로길이
int M = Integer.parseInt(st.nextToken());// 가로길이
int shopCnt = Integer.parseInt(br.readLine());// 상점위치
int[] dists = new int[shopCnt+1];// 각 위치별 거리(하나의 직선으로생각)
for(int i=0;i<shopCnt+1; ++i) { // 상점 개수만큼 반복한다.
st = new StringTokenizer(br.readLine()," ");
int dir = Integer.parseInt(st.nextToken()); // 방향
int val = Integer.parseInt(st.nextToken()); // 값
int dist = 0; // 임시 거리 변수
if(dir == 1) dist = val;// 북
else if(dir == 2) dist = 2*N + M - val; // 남
else if(dir == 3) dist = 2*(N + M) - val;// 서
else if(dir == 4) dist = N + val;// 동
dists[i] = dist;// 거리를 넣어준다.
}
int me = dists[shopCnt];// 내 거리값을 저장한다.
int sum =0; // 거리의 합을 저장할 변수
for(int i=0;i<shopCnt;++i) {
int clockwise = Math.abs(me-dists[i]);// 시계 방향의 거리값
sum += Math.min(clockwise, 2*(N+M) - clockwise);// 반시계랑 비교해서 더 작은 값을 더한다.
}
System.out.println(sum); // 출력해준다.
}
}
집사는개발자가되고파
choppadontbiteme.tistory.com
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[ BOJ ] 17144. 미세먼지 안녕! G5 JAVA (0) | 2021.04.16 |
---|---|
[ BOJ ] 17471. 게리맨더링 G5 JAVA (0) | 2021.04.16 |
[ BOJ ] 16562. 친구비 G3 JAVA (0) | 2021.04.15 |
[ BOJ ] 15961. 회전 초밥 G4 JAVA (0) | 2021.04.15 |
[BOJ] 16174 점프왕 쩰리 G5 (JAVA) (0) | 2021.04.12 |