public class MineGame {
String mineStr = "";
int nCoordinates;
int mCoordinates;
public Boolean isMine(int[] coordinates) {
return mineStr.charAt(coordinatesToIndex(coordinates)) == '*' ? true :false;
}
public int[] indexToCoordinates(int idx) {
return new int[]{(idx%mCoordinates),(idx/mCoordinates)};
}
public Integer coordinatesToIndex(int[] coordinates) {
return coordinates[0] + (coordinates[1]*mCoordinates);
}
private Boolean isPlus(int value){
return value > -1 ? true:false;
}
public String roundMineCnt(int[] coordinates) {
if(isMine(coordinates)){
return "*";
}
int m = coordinates[0];
int mLeft = validity(m,-1);
int mRigth = validity(m,mCoordinates);
int n = coordinates[1];
int nTop = validity(n,-1);
int nButtom = validity(n,nCoordinates);
return String.valueOf(countMine(new int[]{mLeft,m,mRigth},new int[]{nTop,n,nButtom}));
}
private int validity(int z,int maxValue) {
if(maxValue < 0 && (z -1) > -1){
return z - 1;
}else if(maxValue > 0 && (z + 1) < maxValue){
return z + 1;
}
return -1;
}
private int countMine(int[] m, int[] n){
int mineCnt = 0;
for(int j = 0 ; j < n.length;j++){
if(isPlus(n[j])){
for(int i = 0; i < m.length;i++){
if(isPlus(m[i])){
if(isMine(new int[]{m[i],n[j]})){
mineCnt++;
}
}
}
}
}
return mineCnt;
}
public void printMineMap(){
int i = 0;
do{
System.out.print(roundMineCnt(indexToCoordinates(i)));
i++;
if((i%mCoordinates) == 0 && i != 0){
System.out.println();
}
}while(i < (nCoordinates * mCoordinates));
System.out.println();
}
public static void main(String[] args){
String in = "5 3 *.. *.. ... .*. ...";
String[] input = in.split("\\s",3);
MineGame mg = new MineGame();
mg.nCoordinates = new Integer(input[0]);
mg.mCoordinates = new Integer(input[1]);
mg.mineStr = input[2].replaceAll("[\\s]", "");
mg.printMineMap();
}
}
String mineStr = "";
int nCoordinates;
int mCoordinates;
public Boolean isMine(int[] coordinates) {
return mineStr.charAt(coordinatesToIndex(coordinates)) == '*' ? true :false;
}
public int[] indexToCoordinates(int idx) {
return new int[]{(idx%mCoordinates),(idx/mCoordinates)};
}
public Integer coordinatesToIndex(int[] coordinates) {
return coordinates[0] + (coordinates[1]*mCoordinates);
}
private Boolean isPlus(int value){
return value > -1 ? true:false;
}
public String roundMineCnt(int[] coordinates) {
if(isMine(coordinates)){
return "*";
}
int m = coordinates[0];
int mLeft = validity(m,-1);
int mRigth = validity(m,mCoordinates);
int n = coordinates[1];
int nTop = validity(n,-1);
int nButtom = validity(n,nCoordinates);
return String.valueOf(countMine(new int[]{mLeft,m,mRigth},new int[]{nTop,n,nButtom}));
}
private int validity(int z,int maxValue) {
if(maxValue < 0 && (z -1) > -1){
return z - 1;
}else if(maxValue > 0 && (z + 1) < maxValue){
return z + 1;
}
return -1;
}
private int countMine(int[] m, int[] n){
int mineCnt = 0;
for(int j = 0 ; j < n.length;j++){
if(isPlus(n[j])){
for(int i = 0; i < m.length;i++){
if(isPlus(m[i])){
if(isMine(new int[]{m[i],n[j]})){
mineCnt++;
}
}
}
}
}
return mineCnt;
}
public void printMineMap(){
int i = 0;
do{
System.out.print(roundMineCnt(indexToCoordinates(i)));
i++;
if((i%mCoordinates) == 0 && i != 0){
System.out.println();
}
}while(i < (nCoordinates * mCoordinates));
System.out.println();
}
public static void main(String[] args){
String in = "5 3 *.. *.. ... .*. ...";
String[] input = in.split("\\s",3);
MineGame mg = new MineGame();
mg.nCoordinates = new Integer(input[0]);
mg.mCoordinates = new Integer(input[1]);
mg.mineStr = input[2].replaceAll("[\\s]", "");
mg.printMineMap();
}
}
푸핫;;;
40506000 X 40506000 이정도 메트릭트도 견뎌 낼 수 있을지는 글쎄요 ..ㅋㅋ
허접하긴 하지만;;ㅋㅋ
TAG 지뢰게임
댓글을 달아 주세요