2013년 5월 20일 월요일
Programming Challenges: Minesweeper(PC/UVa ID: 110102/10189)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Exercise2Mdf {
static int num = 0;
final static String REG_WHITESPACE = "\\s+";
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Start!");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nM; //행렬(NxM)의 집합
String[][] fld; //행렬에 따른 필드값
String line = "";
try {
while((line = br.readLine())!=null){
line = line.trim().replaceAll(REG_WHITESPACE, " ");
nM = line.split(" ");
int matrixN = Integer.parseInt(nM[0]);
int matrixM = Integer.parseInt(nM[1]);
fld = new String[matrixN][matrixM];
if(Integer.parseInt(nM[0]) == 0 && Integer.parseInt(nM[1]) == 0){
return;
}
//필드값 초기화
for(int i=0; i<matrixN; i++){
for(int j=0; j<matrixM; j++){
fld[i][j] = "0";
}
}
int bombLine = 0; //행렬 한 셋트당 지뢰밭의 행번호
//행렬에 따른 지뢰의 갯수 저장.
while((line = br.readLine())!=null){
char[] bomb = line.toCharArray();
for(int j=0; j<bomb.length; j++){
if((j+1) == matrixM){
break;
}
//핵심 : 현재 위치가 *이면 주위 8개 위치에 1을 더한다.
if(bomb[j] == '*'){
fld[bombLine][j] = "*";
for(int a=bombLine-1; a<=bombLine+1; a++){
for(int b=j-1; b<=j+1; b++){
if((a>=0) && (a<matrixN) &&(b>=0) && (b<matrixM)){
if(!fld[a][b].equals("*")){
fld[a][b] = String.valueOf(Integer.parseInt(fld[a][b])+1);
}
}
}
}
}
}
bombLine++;
if(bombLine == matrixN) break;
}
num++; //지뢰밭 셋트 누적
//출력 시작
StringBuffer sb = new StringBuffer();
sb.append(System.getProperty("line.separator"));
sb.append("Field #"+num+":");
for(int i=0; i<matrixN; i++){
sb.append(System.getProperty("line.separator"));
for(int j=0; j<matrixM; j++){
sb.append(fld[i][j]);
}
}
System.out.println(sb.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기