반응형
[문제]
아래와 같은 x * y로 구성된 2차원 배열이 존재 할 때
배열의 값이 아래와 같이 배치되어 있다고 할때
그 배열의 대각선의 합을 구하라
답은 15
또다른 예시로
답은 73
[해결]
이 문제의 해결을 위한 규칙을 보면 다음과 같은 원칙이 있음
이를 간략히 표현하면 i가 끝까지 증가 > j가 끝까지 증가 > j가 끝까지 감소 > i가 끝까지 감소의 룰을 가짐
- while 문을 만들고 number를 1부터 max까지 될때까지 loop 돌리고 while 내부에 i와 j를 이용해 위 4개의 룰을 for loop로 각각 진행
- 배열에서 대각선의 값은 i와 j값이 같은 경우가 대각선이 되는 위치이니 for loop를 한 번 더 돌려 합을 구함
[프로그램 소스]
public class SpriralArray { public static void main(String[] args) { int size = 5; int[][] arr = new int[size][size]; int num = 1; //1부터 시작 int max = size * size; // max 값 int i = 0; int j = 0; int column = size; int row = size - 1; while (num <= max) { for (int k = 0; k < column; k++) { arr[i][j] = num; j++; num++; } column--; i++; j--; for (int k = 0; k < row; k++) { arr[i][j] = num; i++; num++; } row--; i--; j--; for (int k = 0; k < column; k++) { arr[i][j] = num; j--; num++; } column--; i--; j++; for (int k = 0; k < row; k++) { arr[i][j] = num; i--; num++; } row--; i++; j++; } for (int x = 0; x < arr.length; x++) { for (int y = 0; y < arr[x].length; y++) { System.out.print(arr[x][y] + "\t"); } System.out.println(); } } } |
반응형