삐까냥의 파도타기
2638번) 치즈 본문
문제 출처 : https://www.acmicpc.net/problem/2638
코딩 퀴즈만 너무해서 그런지, 힘들어요.
머리도 안돌아가네요.
2018년 4월 11일 - 약간 다듬은 코드 (소요시간 43분) import java.util.Scanner; public class Q2638 { static int ySize, xSize; static int[][] map, mapClone; static boolean isContinue = true; static int[] moveY = {-1, 0, 1, 0}, moveX = {0, 1, 0, -1};
public static void main(String[] args) { Scanner sc = new Scanner(System.in); ySize = sc.nextInt(); xSize = sc.nextInt(); map = new int[ySize][xSize];
for (int i = 0; i < ySize; i++) { for (int j = 0; j < xSize; j++) { int value = sc.nextInt(); if (value == 1) { map[i][j] = value; } } }
int time = 0;
while (isContinue) { isContinue = false;
//0. 맵 복사 copyMap(); //1. 플러딩, checkMap(0, 0); //2. 사라질 치즈 계산하고 지우기 searchCheese();
time += 1; } System.out.println(time); }
static void copyMap() { mapClone = new int[ySize][xSize]; for (int i = 0; i < ySize; i++) { for (int j = 0; j < xSize; j++) { int value = map[i][j]; if (value == 1) { mapClone[i][j] = value; } } } }
static void checkMap(int y, int x) { mapClone[y][x] = 3;
for (int k = 0; k < 4; k++) { int tempY = y+moveY[k]; int tempX = x+moveX[k];
if (0 <= tempY && tempY < ySize && 0 <= tempX && tempX < xSize && mapClone[tempY][tempX] == 0) { checkMap(tempY, tempX); } } }
static void searchCheese() { for (int i = 0; i < ySize; i++) { for (int j = 0; j < xSize; j++) { if (map[i][j] == 1) { int tempValue = 0; for (int k = 0; k < 4; k++) { int tempY = i+moveY[k]; int tempX = j+moveX[k];
if (0 <= tempY && tempY < ySize && 0 <= tempX && tempX < xSize && mapClone[tempY][tempX] == 3) { tempValue += 1; } }
if (tempValue >= 2) { map[i][j] = 10; } else { isContinue = true; } } } }
for (int i = 0; i < ySize; i++) { for (int j = 0; j < xSize; j++) { if (map[i][j] == 10) { map[i][j] = 0; } } } } } |
'코딩 > 백준 알고리즘' 카테고리의 다른 글
Q9095. 1, 2, 3 더하기 (0) | 2019.02.09 |
---|---|
Q1463. 1로 만들기 (0) | 2019.02.09 |
1600번) 말이 되고픈 원숭이 (0) | 2018.04.11 |
1939번) 통나무 옮기기 (0) | 2018.04.10 |
2468번) 안전 영역 (0) | 2018.04.10 |