시계 반대 방향으로 배열 채우기
알고리즘: BruteForce?
import java.util.*;
class Solution {
public int[] solution(int n) {
int[][] tmp = new int[n][]; // 2차원 배열 생성
for (int i = 0; i < n; i++)
tmp[i] = new int[i + 1]; // 길이만큼 생성
int cnt = 1, last = (n * (1 + n)) / 2, i = 0, j = 0;
while (cnt <= last) { // 배열을 다 채울때까지
while (i < n && tmp[i][j] == 0) // 왼쪽 아래로 내려가기
tmp[i++][j] = cnt++;
i--;
j++;
while (j < n && tmp[i][j] == 0) // 오른쪽으로 가기
tmp[i][j++] = cnt++;
i--;
j -= 2;
while (i > 0 && tmp[i][j] == 0) // 왼쪽 위로 올라가기
tmp[i--][j--] = cnt++;
i += 2;
j++;
}
return Arrays.stream(tmp).flatMapToInt(Arrays::stream).toArray();
} // 2차원 배열 1차원으로 평탄화
}
이번 문제는 뭔가 DFS로 풀 수 있을 것 같긴 한데 어려울 것 같아서
패턴을 찾아서 그냥 그대로 2차원 배열을 만들고
그걸 다시 1차원으로 평탄화 하는 식으로 풀었다
1) stream.flatMapToInt