본문 바로가기

IM대비

백준 2564 <경비원>

728x90

경비원의 위치를 중심으로 나머지 위피의 최솟값을 구하는 문제이다. 간단한 시뮬이기 때문에 문제만 이해하면 구현하기 쉽다.

 

문제 풀이

  1. 경비원의 위치를 구한다
  2. 경비원의 위치에서 다른 상점의 위치를 비교한다
  3. 값을 계산한다.

전체 코드

더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{

	static int width,height,num,sx,sy,sum;
	static int count[][];
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		width=Integer.parseInt(st.nextToken());
		height=Integer.parseInt(st.nextToken());
		num=Integer.parseInt(br.readLine());
		count=new int[num][2];
		for(int i=0;i<num;i++) {
			st = new StringTokenizer(br.readLine());
			count[i][0]=Integer.parseInt(st.nextToken());
			count[i][1]=Integer.parseInt(st.nextToken());
		}
		st = new StringTokenizer(br.readLine());
		sx=Integer.parseInt(st.nextToken());
		sy=Integer.parseInt(st.nextToken());
		go();
		System.out.println(sum);
	}

	private static void go() {
		// TODO Auto-generated method stub
		if(sx==1) {//북
			for(int i=0;i<num;i++) {
				if(count[i][0]==1) {
					sum+=Math.abs(count[i][1]-sy);
				}
				else if(count[i][0]==2) {
					sum+=Math.min(count[i][1]+sy,width-count[i][1]+width-sy)+height;
				}else if(count[i][0]==3) {
					sum+=count[i][1]+sy;
				}else if(count[i][0]==4) {
					sum+=width-sy+count[i][1];
				}
			}
		}
		else if(sx==2) {//남
			for(int i=0;i<num;i++) {
				if(count[i][0]==1) {
					sum+=Math.min(count[i][1]+sy,width-count[i][1]+width-sy)+height;
				}
				else if(count[i][0]==2) {
					sum+=Math.abs(count[i][1]-sy);
				}else if(count[i][0]==3) {
					sum+=height-count[i][1]+sy;
				}else if(count[i][0]==4) {
					sum+=width-sy+height-count[i][1];
				}
			}
		}else if(sx==3) {//서
			for(int i=0;i<num;i++) {
				if(count[i][0]==1) {
					sum+=count[i][1]+sy;
				}
				else if(count[i][0]==2) {
					sum+=height-sy+count[i][1];
				}else if(count[i][0]==3) {
					sum+=Math.abs(count[i][1]-sy);
				}else if(count[i][0]==4) {
					sum+=Math.min(count[i][1]+sy,height-count[i][1]+height-sy)+width;
				}
			}
		}else if(sx==4) {//동
			for(int i=0;i<num;i++) {
				if(count[i][0]==1) {
					sum+=width-count[i][1]+sy;
				}
				else if(count[i][0]==2) {
					sum+=height-sy+width-count[i][1];
				}else if(count[i][0]==3) {
					sum+=Math.min(count[i][1]+sy,height-count[i][1]+height-sy)+width;
				}else if(count[i][0]==4) {
					sum+=Math.abs(count[i][1]-sy);
				}
			}
		}
	}

}

 

'IM대비' 카테고리의 다른 글

백준 2669 <직사각형 네개의 합집합의 면적 구하기>  (0) 2020.09.20
백준 10157 <자리배정>  (0) 2020.09.20
백준 2477 <참외밭>  (0) 2020.09.19
백준 2491 <수열>  (0) 2020.09.19
백준 2563 <색종이>  (0) 2020.09.19