[백준] 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.