문제2번 지뢰찾기


문제2번. 답은 나오는데 티비보다가 풀어서 왠지 무식하게 푼것 같음. ㅠㅠ 

O(n) 이긴 한데... 각 셀별로 최대 8번 비교.... (n 은 배열의 셀 갯수)



package chapter01;


public class P1 {


static char[][] data1 = {기

{'*','.','.','.'},

{'.','.','.','.'},

{'.','.','.','.'},

{'.','*','.','.'}

};

static char[][] data2 = {

{'*','*','.','.','.'},

{'.','.','.','.','.'},

{'.','*','.','.','.'}

};

public static void main(String[] args) {


String[][] result = solve(data1);

print(result);

System.out.println("---------------");

result = solve(data2);

print(result);

}


public static String[][] solve(char[][] data){

String[][] result = new String[data.length][data[0].length];

int count = 0;

int maxI = data.length-1;

int maxJ = data[0].length-1;

for(int i=0; i < data.length; i++){

for(int j=0; j < data[i].length; j++ ){

count = 0;

if(data[i][j] == '*'){

result[i][j] = "*";

}else{

if(i > 0){

if(data[i-1][j] == '*') count++;

if(j > 0 && data[i-1][j-1] == '*' ) count++;

if(j < maxJ && data[i-1][j+1] == '*') count++;

}

if(j > 0 && data[i][j-1] == '*') count++;

if(j < maxJ && data[i][j+1] == '*') count++;

if(i < maxI){

if(data[i+1][j] == '*') count++;

if(j > 0 && data[i+1][j-1] == '*' ) count++;

if(j < maxJ && data[i+1][j+1] == '*') count++;

}

result[i][j] = String.valueOf(count);

}

}

}

return result;

}

public static void print(String[][] result){

for(int i=0; i < result.length; i++){

String[] row = result[i];

for(int j=0; j < row.length; j++){

System.out.print(row[j] + " ");

}

System.out.print("\n");

}

}

}