본문 바로가기

알고리즘 문제풀이

백준2564-경비원 java

728x90
package a0210;

import java.util.*;

public class 경비원 {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int garo = sc.nextInt();		//가로 크기
		int sero = sc.nextInt();		//세로 크기
		int cnt = sc.nextInt();			//지점 개수 
	
		int[][] arr = new int[cnt][2];
		
		for(int i=0; i<cnt; i++) {
			arr[i][0] = sc.nextInt();		//방향
			arr[i][1] = sc.nextInt();		//기준점으로부터의 거리 
		}
		
		int stddir = sc.nextInt();			//기준점 방향
		int len = sc.nextInt();				//기준점으로부터 거리 
		
		int[] pair = new int[5];			//밎은편 구분을 위한 배열	
		pair[1] = 2; pair[2] = 1; pair[3] =4; pair[4]=3;
		
		
		// 북:1, 남:2, 서:3, 동:4
		int sum = 0;
		for(int i=0; i<cnt; i++) {
			int nowdir = arr[i][0];
			int nowlen = arr[i][1];
			
			if(stddir==nowdir)sum+=Math.abs(len-nowlen);
			else if(stddir==1) {
				if(nowdir==3)sum+=(len+nowlen);
				else if(nowdir==4)sum+=(garo-len+nowlen);
				else if(nowdir==2) {
					sum+=Math.min(len+sero+nowlen, garo-len+sero+garo-nowlen);
				}
			}else if(stddir==2) {
				if(nowdir==1) {
					sum+=Math.min(len+sero+nowlen, garo-len+sero+garo-nowlen);
				}else if(nowdir==3)sum+=(len+sero-nowlen);
				 else if(nowdir==4)sum+=(garo-len+sero-nowlen);
			}else if(stddir==3) {
				if(nowdir==1)sum+=len+nowlen;
				else if(nowdir==2)sum+=(sero-len+nowlen);
				else if(nowdir==4) {
					sum+=Math.min(len+garo+nowlen, sero-len+garo+sero-nowlen);
				}
			}else if(stddir==4) {
				if(nowdir==1)sum+=len+garo-nowlen;
				else if(nowdir==2)sum+=(garo-nowlen+sero-len);
				else if(nowdir==3) {
					sum+=Math.min(len+garo+nowlen, garo+sero-len+sero-nowlen);
				}
			}
		}
		System.out.println(sum);
	}
}

'알고리즘 문제풀이' 카테고리의 다른 글

백준2635-수 이어가기 java  (0) 2022.02.27
백준2578-빙고 java  (0) 2022.02.26
백준2563-색종이 java  (0) 2022.02.26
백준2559-수열 java  (0) 2022.02.26
백준7576 - 토마토 java  (0) 2022.02.26