단순 구현 문제입니다.
그림과 같이 값을 채우기 위해서는 세 번의 연산이 필요합니다.
- 세로 N번
- 가로 N-1번
- 대각선 N-2번
세로, 가로 대각선을 채울 때 마다 N은 3이 줄어들어 줄어든 N을 사용하여 내부를 채우면 됩니다.
[구현 코드]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
private static int[][] map;
private static int num, row, col;
public static int[] solution(int n) {
map = new int[n + 1][n + 1];
row = -1;
col = 0;
for (int i = n; i > 0; i-=3) {
fillCol(i); // 세로
fillRow(i); // 가로
fillDia(i); // 대각선
}
List<Integer> ans = new ArrayList<>();
for(int i=0; i<n; i++){
for(int j=0; j<i+1; j++){
ans.add(map[i][j]);
}
}
return Arrays.stream(ans.toArray(new Integer[0])).mapToInt(Integer::intValue).toArray();
}
private static void fillDia(int k) {
for(int j=0; j<k-2; j++){
map[--row][--col] = ++num;
}
}
private static void fillRow(int k) {
for(int j=0; j<k-1; j++){
map[row][++col] = ++num;
}
}
private static void fillCol(int k) {
for(int j=0; j<k; j++){
map[++row][col] = ++num;
}
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 - N으로 표현(Java) (0) | 2022.10.21 |
---|---|
프로그래머스 - 타겟 넘버(Java) (0) | 2022.10.11 |
프로그래머스 - 풍선 터트리기(Java) (0) | 2022.10.07 |
프로그래머스 - 숫자 게임(Java) (0) | 2022.10.06 |
프로그래머스 - 이중우선순위큐(Java) (0) | 2022.10.05 |