본문 바로가기
알고리즘/백준

[JAVA]백준_2564_경비원

by 박 현 황 2021. 4. 14.

문제링크

https://www.acmicpc.net/problem/2564

 

2564번: 경비원

첫째 줄에 블록의 가로의 길이와 세로의 길이가 차례로 주어진다. 둘째 줄에 상점의 개수가 주어진다. 블록의 가로의 길이와 세로의 길이, 상점의 개수는 모두 100이하의 자연수이다. 이어 한 줄

www.acmicpc.net

 

 

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int width = sc.nextInt();
		int height = sc.nextInt();
		int store = sc.nextInt(); //상점의 개수
		
		//1:북   2:남  3:서   4:동
		int pos[][] = new int[store+1][2]; //동근이의 위치까지 저장할 배열
		
		for(int i=0;i<=store;i++) {
			pos[i][0] = sc.nextInt();
			pos[i][1] = sc.nextInt();
		}
		
		int result = 0;
		
		for(int i=0;i<store;i++) {
			int dir = pos[i][0]; //위치
			int len = pos[i][1]; //위치에서 얼마만큼 떨어져 있는지
			
			switch (dir) {
			case 1: //북
				if(dir == pos[store][0]) result += Math.abs(pos[store][1]-len); //동근이와 위치가 같은 경우
				else if(pos[store][0] == 2) {//동근이가 남쪽에 있는 경우
					result += Math.min(pos[store][1]+height+len,(width-pos[store][1])+height+(width-len));
				}
				else if(pos[store][0] == 3) {
					result += (pos[store][1] + len);
				}
				else {//동
					result += ((width -len) + pos[store][1]);
				}
				break;
			case 2: //남
				if(dir == pos[store][0]) result += Math.abs(pos[store][1]-len); //동근이와 위치가 같은 경우
				else if(pos[store][0] == 1) {//동근이가 북쪽에 있는 경우
					result += Math.min(pos[store][1]+height+len,(width-pos[store][1])+height+(width-len));
				}
				else if(pos[store][0] == 3) { //서쪽
					result += (pos[store][1] + (height - len));
				}
				else { //동쪽
					result += ((width - len) + (height - pos[store][1]));
				}
				break;
			case 3: //서
				if(dir == pos[store][0]) result += Math.abs(pos[store][1]-len); //동근이와 위치가 같은 경우
				else if(pos[store][0] == 4) { //동근이가 동쪽에 있는 경우
					result += Math.min((height-pos[store][1])+width+(height-len),pos[store][1]+width+len);
				}
				else if(pos[store][0] == 1) {
					result += (pos[store][1] + len);
				}
				else { //남
					result += (pos[store][1] + (height - len));
				}
				break;
			case 4: //동
				if(dir == pos[store][0]) result += Math.abs(pos[store][1] - len);
				else if(pos[store][0] == 3) {
					result += Math.min((height-pos[store][1])+width+(height-len),pos[store][1]+width+len);
				}
				else if(pos[store][0] == 1) {
					result += (len + (width-pos[store][1]));
				}
				else {
					result += ((height-len) + (width - pos[store][1]));
				}
				break;
			}
		}
		
		
		System.out.println(result);
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

[JAVA]백준_17836_ 공주님을구해라  (0) 2021.04.14
[JAVA]백준_1806_부분합  (0) 2021.04.14
[JAVA]백준 _11404_플로이드  (0) 2021.04.09
[JAVA]백준_2212_센서  (0) 2021.04.07
[JAVA]백준_13164_행복유치원  (0) 2021.04.07