(Q) 다음 규칙에 따라 지뢰찾기를 만드세요
- 9x9 크기의 정수 배열을 준비합니다
- 지뢰는 9로 표시하며, 배열 내에 무작위로 20개가 배치됩니다
- 배치된 이후 전체 지도를 출력하세요
package day08;
import java.util.Random;
public class Day08_array2d_Test08 {
public static void main(String[] args) {
// 행과 열 입력
int row = 9;
int column = 9;
// 배열 생성
int[][] array = new int[row][column];
Random r = new Random();
// 지뢰(숫자 9) 20개 랜덤 배치
int mineCount = 0;
for(int i = 0 ; i < 20 ; i ++) {
int x = r.nextInt(9);
int y = r.nextInt(9);
if(array[x][y] == 0) {
array[x][y] = 9;
mineCount ++;
}
else {
i --;
}
}
// 설치된 지뢰의 갯수 확인
System.out.println(mineCount);
// 출력
for(int i = 0 ; i < row ; i ++) {
for(int j = 0 ; j < column ; j ++) {
System.out.printf(array[i][j] + " " );
}
System.out.println();
}
}
}
(추가 문제)
- 지뢰를 제외한 나머지 칸은 자신을 제외한 반경 8칸의 지뢰 개수를 세어 숫자를 기록해야 합니다
- 가장자리에 있는 칸의 경우 배열을 벗어나는 부분을 제외하고 계산해야 합니다
- 반경에 지뢰가 하나도 없다면 0이 설정됩니다
**
package day08;
import java.util.Random;
public class Day08_array2d_Test08_3 {
public static void main(String[] args) {
// 행과 열 입력
int row = 9;
int column = 9;
// 배열 생성
int[][] array = new int[row][column];
Random r = new Random();
// 지뢰(숫자 9) 20개 랜덤 배치
int mineCount = 0;
for(int i = 0 ; i < 20 ; i ++) {
int x = r.nextInt(9);
int y = r.nextInt(9);
if(array[x][y] == 0) {
array[x][y] = 9;
mineCount ++;
}
else {
i --;
}
}
// 설치된 지뢰의 갯수 확인
System.out.println(mineCount);
// (추가문제) 자신을 제외한 자신 주변 8방향의 지뢰 갯수 총합 카운트
// 지뢰의 오른쪽 칸에 +1 하기
for(int j = 0 ; j < array.length ; j ++) {
for(int i = 0 ; i < array.length ; i ++) {
if(i < array.length - 1) {
if(array[j][i] == 9) {
if(array[j][i+1] == 9) {
array[j][i+1] += 0;
}
else {
array[j][i+1] += 1;
}
}
else {
array[j][i+1] += 0;
}
}
else if(i == array.length - 1) {
break;
}
}
}
// 지뢰의 왼쪽 칸에 +1 하기
for(int j = 0 ; j < array.length ; j ++) {
for(int i = array.length - 1 ; i >= 0 ; i --) {
if(i > 0) {
if(array[j][i] == 9) {
if(array[j][i-1] == 9) {
array[j][i-1] += 0;
}
else {
array[j][i-1] += 1;
}
}
else {
array[j][i-1] += 0;
}
}
else if(i == 0) {
break;
}
}
}
// 지뢰의 아래쪽 칸에 +1 하기
for(int i = 0 ; i < array.length ; i ++) {
for(int j = 0 ; j < array.length ; j ++) {
if(j < array.length - 1) {
if(array[j][i] == 9) {
if(array[j+1][i] == 9) {
array[j+1][i] += 0;
}
else {
array[j+1][i] += 1;
}
}
else {
array[j+1][i] += 0;
}
}
else if(j == array.length - 1) {
break;
}
}
}
// 지뢰의 위쪽 칸에 +1 하기
for(int i = 0 ; i < array.length ; i ++) {
for(int j = array.length - 1 ; j >= 0 ; j --) {
if(j > 0) {
if(array[j][i] == 9) {
if(array[j-1][i] == 9) {
array[j-1][i] += 0;
}
else {
array[j-1][i] += 1;
}
}
else {
array[j-1][i] += 0;
}
}
else if(j == 0) {
break;
}
}
}
// 지뢰의 오른쪽 대각선 아래 칸에 +1 하기
for(int j = 0 ; j < array.length ; j ++) {
for(int i = 0 ; i < array.length ; i ++) {
if(i == array.length - 1 || j == array.length - 1) {
break;
}
else {
if(array[j][i] == 9) {
if(array[j+1][i+1] == 9) {
array[j+1][i+1] += 0;
}
else {
array[j+1][i+1] += 1;
}
}
else {
array[j+1][i+1] += 0;
}
}
}
}
// 지뢰의 오른쪽 대각선 위쪽 칸에 +1 하기
for(int i = 0 ; i < array.length ; i ++) {
if(i == array.length - 1) {
break;
}
else {
for(int j = array.length - 1 ; j >= 0 ; j --) {
if(j == 0) {
break;
}
else {
if(array[j][i] == 9) {
if(array[j-1][i+1] == 9) {
array[j-1][i+1] += 0;
}
else {
array[j-1][i+1] += 1;
}
}
else {
array[j-1][i+1] += 0;
}
}
}
}
}
// 지뢰의 왼쪽 대각선 아래 칸에 +1 하기
for(int j = 0 ; j < array.length ; j ++) {
if(j == array.length - 1) {
break;
}
else {
for(int i = array.length - 1 ; i >= 0 ; i --) {
if(i == 0) {
break;
}
else {
if(array[j][i] == 9) {
if(array[j+1][i-1] == 9) {
array[j+1][i-1] += 0;
}
else {
array[j+1][i-1] += 1;
}
}
else {
array[j+1][i-1] += 0;
}
}
}
}
}
// 지뢰의 왼쪽 대각선 위쪽 칸에 +1 하기
for(int j = array.length - 1 ; j >= 0 ; j --) {
if(j == 0) {
break;
}
else {
for(int i = array.length - 1 ; i >= 0 ; i --) {
if(i == 0) {
break;
}
else {
if(array[j][i] == 9) {
if(array[j-1][i-1] == 9) {
array[j-1][i-1] += 0;
}
else {
array[j-1][i-1] += 1;
}
}
else {
array[j-1][i-1] += 0;
}
}
}
}
}
// 출력
for(int i = 0 ; i < row ; i ++) {
for(int j = 0 ; j < column ; j ++) {
System.out.printf(array[i][j] + " " );
}
System.out.println();
}
}
}
'국비교육 > 국비교육 복습' 카테고리의 다른 글
Day09_oop.basic2 : 객체 생성 연습 (1) (0) | 2022.08.07 |
---|---|
Day08_array2d_Test09 : 성적의 합계, 평균, 등수 (2차원 배열의 활용) (★★) (0) | 2022.08.07 |
Day08_array2d_Test07 : 빙고판 만들기 (2차원 배열 + 랜덤 배열) (★) (0) | 2022.08.07 |
!Day08_array2d_Test06 : 2차원 배열 (대각 방향 초기화 - 마방진의 원리) (★★★) (0) | 2022.08.07 |
Day08_array2d_Test05 : 2차원 배열 (세로 방향 초기화) + MOD를 이용하는 방법 (★) (0) | 2022.08.07 |