[백준 - 2897번] 몬스터 트럭 - Java //Wello Horld//
이번에는 BOJ의 2897번 문제 "몬스터 트럭" 을 풀어보도록 하자
해빈이가 갖고 있는 몬스터 트럭을 이용해서 주차를 하는데, 총 (R , C) 만큼의 공간에 (2 , 2)인 몬스터 트럭을 주차하고 싶어한다. 이때, (R , C)만큼의 공간에는 빌딩('#')도 있고, 주차된 차('X'), 빈 주차 공간('.') 3가지의 경우가 존재하고, 빌딩은 부수고 주차할 수 없지만, 주차된 차는 부수고 주차할 수 있다고 할 때, 몇대를 부수고 주차를 할 수 있는지 각 경우에 따라서 구해주면 되는 문제이다.
입력으로 R, C가 주어지고, 그다음 (R X C) 만큼 3가지의 경우 '#', 'X', '.' 가 주어진다. 출력으로, 총 다섯 줄에 0대를 부수고 주차할 수 있는 공간의 개수, 1대를 부수고 주차할 수 있는 공간의 개수, ... , 4대를 부수고 주차할 수 있는 공간의 개수를 출력 해주면 되는 문제이다.
성공한 코드는 아래와 같다
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
char[][] map = new char[50][50];
StringTokenizer st = new StringTokenizer(br.readLine());
int R = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
for(int i = 0; i < R; i++){
String input = br.readLine();
for(int j = 0; j < C; j++){
map[i][j] = input.charAt(j);
}
}
int zero = 0, one = 0, two = 0, three = 0, four = 0;
for(int i = 0; i < R - 1; i++){
for(int j = 0; j < C - 1; j++){
int cnt = 0;
base:
for(int k = i; k < i + 2; k++){
for(int l = j; l < j + 2; l++){
if(map[k][l] == '#') break base;
if(map[k][l] == 'X') cnt++;
if(k == i + 1 && l == j + 1){
if(cnt == 0) zero++;
else if(cnt == 1) one++;
else if(cnt == 2) two++;
else if(cnt == 3) three++;
else if(cnt == 4) four++;
}
}
}
}
}
bw.write(zero + "\n");
bw.write(one + "\n");
bw.write(two + "\n");
bw.write(three + "\n");
bw.write(four + "\n");
bw.flush();
br.close();
bw.close();
}
}
문제 : https://www.acmicpc.net/problem/2897
2897번: 몬스터 트럭
문제 해빈이가 드디어 면허를 땄다! 해빈이의 부모님은 기뻐하며 해빈이에게 첫 차로 몬스터 트럭을 사 주셨다. 해빈이는 자신의 첫 차가 강남 대로의 모든 차를 부수면서 러시 아워조차 자신을 막을 수 없다는 것을 깨닫고 기뻐했지만, 차가 다른 차들의 네 배 크기이기 때문에 주차하는 데 애를 먹고 있었다. 그걸 본 준규는 마침 강남에서 공영 주차장 아르바이트를 하고 있기 때문에 정기적으로 해빈이에게 강남 주차장 지도를 보내주기로 했다. 지도는 R행 C열의 표로
www.acmicpc.net