Java 2차원 배열 4방, 8방 탐색

Bennie97·2022년 1월 23일
0

⚠️ 안녕하세요. 이 글은 스스로 공부, 까먹지 않게 정리용으로 기록한것이므로 다소 오류가 있을수 있습니다. 이 점 참고해주세요. (혹시 틀린 내용이나 오류 발견시 지적해주시면 감사하겠습니다!)


1. X로 표시된 항목의 상하좌우 숫자의 합을 구하여라. (단 이미 사용된 숫자는 다시 사용x)

5 X 1 2
X X 2 3
4 X 5 9
8 7 X 5

public class ArrayTest1 {
	public static void main(String[] args) {
		int [][] deltas = {{-1, 0}, {1, 0}, {0, -1}, {0,1}}; //상, 하, 좌, 우
		
		char[][] grid = {{'5', 'X', '1', '2'}, 
                {'X', 'X', '2', '3'}, 
                {'4', 'X', '5', '9'}, 
                {'8', '7', 'X', '5'}};

		int sum = 0;
		for(int r = 0; r < grid.length; r++)
			for(int c = 0; c < grid[0].length; c++) {
				if( grid[r][c] == 'X') {
					for(int i = 0; i < 4; i++) {
						int nr = r + deltas[i][0];
						int nc = c + deltas[i][1];
					
						if(nr >= 0 && nr < grid[0].length && nc >= 0 && nc < grid[0].length && grid[nr][nc] != 'X') {
							sum+=grid[nr][nc] - '0';
							grid[nr][nc] = '0';
						
						}
					} 
				}
			}
		System.out.println(sum);
	}
}

2. X로 표시된 항목을 둘러싸고 있는 8방면에 있는 숫자의 합을 구하여라. (단 이미 사용된 숫자는 다시 사용x)

5 X 1 2
X X 2 3
4 X 5 9
8 7 X 5

public class ArrayTest2 {
	public static void main(String[] args) {
		int [][] deltas = {{-1, -1}, {-1, 0}, {-1, 1},
        				   {0, 1}, {1, 1}, {1, 0}, {1,-1}, {0, -1}};
        //서북, 북, 동북, 동, 동남, 남, 서남, 서 (8가지 방면)
		
		char[][] grid = {{'5', 'X', '1', '2'}, 
                {'X', 'X', '2', '3'}, 
                {'4', 'X', '5', '9'}, 
                {'8', '7', 'X', '5'}};

		int sum = 0;
		for(int r = 0; r < grid.length; r++)
			for(int c = 0; c < grid[0].length; c++) {
				if( grid[r][c] == 'X') {
					for(int i = 0; i < 8; i++) {
						int nr = r + deltas[i][0];
						int nc = c + deltas[i][1];
					
						if(nr >= 0 && nr < grid[0].length && nc >= 0 && nc < grid[0].length && grid[nr][nc] != 'X') {
							sum+=grid[nr][nc] - '0';
							grid[nr][nc] = '0';
						
						}
					} 
				}
			}
		System.out.println(sum);
	}
}
profile
현명한개발자가되자

0개의 댓글