728x90
경비원의 위치를 중심으로 나머지 위피의 최솟값을 구하는 문제이다. 간단한 시뮬이기 때문에 문제만 이해하면 구현하기 쉽다.
문제 풀이
- 경비원의 위치를 구한다
- 경비원의 위치에서 다른 상점의 위치를 비교한다
- 값을 계산한다.
전체 코드
더보기
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 |