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