봉우리 알고리즘
2024. 5. 30. 17:30ㆍ카테고리 없음
package test.date;
import java.util.Random;
public class bong {
public static void main(String[] args) {
// int[][] data;
// 2차 베열, 중괄호 사용
int [][] data =
{
{5, 3, 7, 2, 3},
{3, 7, 1, 6, 1},
{7, 2, 5, 3, 4},
{4, 3, 6, 4, 1},
{8, 7, 3, 5, 2}
};
int up, down, left, right;
// boolean dUp, dDown, dLeft, dRight;
outer:
for(int i = 0; i<data.length; i++) {
for(int j = 0; j<data.length; j++) {
if(data[i][j] == 2) {
System.out.println("2 => " + "("+ i + "," + j + ")");
// 모든 데이터의 특성을 파악(비교)
up = (i-1 > 0) ? data[i-1][j] : 0;
down = (i+1 > 0) ? data[i+1][j] : 0;
left = (j-1 > 0)?data[i][j-1] : 0;
right = (j+1 > 0)?data[i][j+1] : 0;
System.out.println("상 => " + up);
System.out.println("하 => " + down);
System.out.println("좌 => " + left);
System.out.println("우 => " + right);
// dUp = (data[i][j] > up) ? true : false;
// exception 처리 사용시
// int up, down, left, right;
// up = data[i-1][j];
// down = data[i+1][j];
// 2를 찾아라 몇 번째 행의 몇 번째 열에 있는지
// 예) 2 => (0, 3)
// System.out.println("상 => " + "("+ (i-1) + "," + j + ")");
// System.out.println("하 => " + "("+ (i+1) + "," + j + ")");
// System.out.println("좌 => " + "("+ i + "," + (j-1) + ")");
// System.out.println("우 => " + "("+ i + "," + (j+1) + ")");
break outer; // 하나만 찾기
}
}
}
// ***봉오리 알고리즘
System.out.println();
Random rand = new Random(); // 랜덤한 값을 주기 위해서
int size = 7; // 행과 열의 크기
int[][] grid = new int[size][size];
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
// 외곽 0으로 채우기
if(i == 0 || i == size-1 || j == 0 || j == size-1) {
grid[i][j] = 0;
}else {
int value = rand.nextInt(9) + 1; // 1~9 사이의 랜덤 값
boolean isValid = true;
// 상하좌우 값이 같은지 확인
if (i > 0 && grid[i - 1][j] == value)
isValid = false; // 위
if (i < size-1 && grid[i + 1][j] == value)
isValid = false; // 아래
if (j > 0 && grid[i][j - 1] == value)
isValid = false; // 왼쪽
if (j < size-1 && grid[i][j + 1] == value)
isValid = false; // 오른쪽
// 값이 연달아 올때는 새롭게 값을 채워 넣어야 한다
while(!isValid) {
value = rand.nextInt(9) + 1; // 1~9 사이의 랜덤 값
isValid = true;
// 상하좌우 값이 같은지 확인
if (i > 0 && grid[i - 1][j] == value)
isValid = false; // 위
if (i < size-1 && grid[i + 1][j] == value)
isValid = false; // 아래
if (j > 0 && grid[i][j - 1] == value)
isValid = false; // 왼쪽
if (j < size-1 && grid[i][j + 1] == value)
isValid = false; // 오른쪽
}
grid[i][j] = value;
}
}
}
// 출력하기
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.print(grid[i][j]);
}System.out.println();
}
// 상하좌우에서 제일 큰 봉오리 찾기
int bong = 0;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
bong = grid[i][j];
if(!(i == 0 || i == size-1 || j == 0 || j == size-1)) {
if(bong > grid[i - 1][j] && bong > grid[i + 1][j] && bong > grid[i][j - 1] && bong > grid[i][j + 1]) {
System.out.println("봉오리는 위치" + "[" + i + "]" + "[" + j + "]" + " 숫자는 " + bong + "입니다" );
}
}
}
}
}
}