일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- php 프로그래밍 입문 문제풀이
- C언어
- php 프로그래밍 입문 솔루션
- php 프로그래밍 입문
- C
- 최단 경로
- SWEA
- 페이코 추천인코드
- 파이썬
- Java
- 배열
- 한정 분기
- 플러터 개발환경 설정
- php 프로그래밍
- Flutter
- 스프링
- 페이코 추천인
- spring
- 자바 스프링
- 플러터
- 백준
- programmers
- 페이코 친구코드
- 페이코 초대코드
- php
- php 프로그래밍 입문 예제
- php 프로그래밍 입문 3판
- 자바
- php 프로그래밍 입문 연습문제
- JAVA SPRING
Archives
- Today
- Total
11-07 11:40
ImJay
[BOJ/Java] 16919. 봄버맨 2 본문
반응형
[BOJ/Java] 16919. 봄버맨 2
풀이
package edu.ssafy.im.BOJ.G3.No16919;
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// 입력 받기
String input = br.readLine();
StringTokenizer st = new StringTokenizer(input);
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
char[][] graph = new char[r][c]; // 격자판을 나타내는 배열
char[][] original = new char[r][c]; // 초기 상태를 저장하는 배열
// 격자판 초기 상태 입력 받기
for (int x = 0; x < r; x++) {
String row = br.readLine();
for (int y = 0; y < c; y++) {
graph[x][y] = row.charAt(y);
original[x][y] = row.charAt(y);
}
}
// N이 2 이상인 경우에 대한 처리
if (!(n == 0 || n == 1)) {
n %= 4; // 주기성을 갖도록 N을 4로 나눈 나머지 계산
n += 2; // N이 2 이상이면 2를 더해줌
int[][] direction = { { 0, 0 }, { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } }; // 인접한 네 칸을 나타내는 방향 배열
// 시간이 흐르는 동안의 상태 변화 처리
for (int i = 0; i <= n; i++) {
if (i % 4 == 2 || i % 4 == 0) { // 폭탄을 설치하는 경우
for (int x = 0; x < r; x++) {
for (int y = 0; y < c; y++) {
graph[x][y] = 'O'; // 모든 칸에 폭탄 설치
}
}
} else { // 폭탄이 폭발하는 경우
for (int x = 0; x < r; x++) {
for (int y = 0; y < c; y++) {
if (original[x][y] == 'O') { // 폭탄이 있는 위치인 경우
for (int d = 0; d < 5; d++) { // 인접한 네 칸을 탐색
int newX = x + direction[d][0];
int newY = y + direction[d][1];
if (0 <= newX && newX < r && 0 <= newY && newY < c) {
graph[newX][newY] = '.'; // 인접한 칸 파괴
}
}
}
}
}
// 현재 상태를 original 배열에 저장
for (int x = 0; x < r; x++) {
System.arraycopy(graph[x], 0, original[x], 0, c);
}
}
}
}
// 결과 출력
for (int x = 0; x < r; x++) {
for (int y = 0; y < c; y++) {
sb.append(graph[x][y]);
}
sb.append("\n");
}
System.out.print(sb);
}
}
반응형
'알고리즘 > BOJ - Java' 카테고리의 다른 글
[BOJ/Java] 16943. 숫자 재배치 (0) | 2024.02.04 |
---|---|
[BOJ/Java] 3040. 백설 공주와 일곱 난쟁이 (0) | 2024.02.04 |
[BOJ/Java] 18115. 카드 놓기 (0) | 2024.02.04 |
[BOJ/Java] 12891. DNA 비밀번호 (0) | 2024.02.04 |
[BOJ/Java] 2961. 도영이가 만든 맛있는 음식 (2) | 2024.02.04 |
Comments