[백준] 2564번 경비원 (java)

728x90
반응형

이차 배열 겉을 도므로 겉을 쭉 늘여서 하나의 직선으로 본다

0 ~ m은 북쪽 m~m+n은 동쪽 m+n~ m+n+n 서쪽 영역 이런 식이다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static int m,n;
	static int n_store;
	static int[]stores;
	static int dir,len; //방향과 거리
	static int sum;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		st=new StringTokenizer(br.readLine());
		m=Integer.parseInt(st.nextToken());
		n=Integer.parseInt(st.nextToken());
		n_store=Integer.parseInt(br.readLine());
		stores=new int[n_store];
		for (int i = 0; i < n_store; i++) {
			st=new StringTokenizer(br.readLine());
			int a=Integer.parseInt(st.nextToken());
			int b=Integer.parseInt(st.nextToken());
			
			if(a==1) {
				stores[i]=b;
			}else if(a==2) {
				stores[i]=m+n+(m-b);
			}else if(a==3) {
				stores[i]=m+n+m+(n-b);
			}else {
				stores[i]=m+b;
			}
			
		}
		
		st=new StringTokenizer(br.readLine());
		dir=Integer.parseInt(st.nextToken());
		int x=Integer.parseInt(st.nextToken());
		if(dir==1) {
			len=x;
		}else if(dir==2) {
			len=m+n+(m-x);
		}else if(dir==3) {
			len=m+n+m+(n-x);
		}else {
			len=m+x;
		}
		calculate();

		System.out.println(sum);
		
	}
	private static void calculate() {
		for (int i = 0; i < n_store; i++) {
			int max=len>stores[i]?len:stores[i];
			int min=len<=stores[i]?len:stores[i];
			sum+=Math.min(max-min, 2*(m+n)-max+min);
		}
		
	}
}
728x90
반응형

'백준' 카테고리의 다른 글

[백준] 2563번 색종이 (java)  (0) 2021.02.09
[백준] 1158번 요세푸스 (java)  (0) 2021.02.09
[백준] 2493번 탑(java)  (0) 2021.02.04
[백준] 1244번 스위치 켜고 끄기 (java)  (0) 2021.02.01
[백준 1157번] 단어 공부 (python)  (0) 2020.12.24
TAGS.

Comments