n * (n + 1) / 2
function solution(n) {
const result = Array(n)
.fill()
.map((_, i) => Array(i + 1).fill(0));
const max = (n * (n + 1)) / 2;
let [i, j, curr] = [0, 0, 1];
while (curr <= max) {
// 증가 세로 채우기
while (i < n && !result[i][j]) {
result[i++][j] = curr++;
}
--i, ++j;
// 가로 채우기
while (j < n && !result[i][j]) {
result[i][j++] = curr++;
}
--i, (j -= 2);
// 감소 세로 채우기
while (i > 0 && j > 0 && !result[i][j]) {
result[i--][j--] = curr++;
}
(i += 2), ++j;
}
return result.flat();
}
혼자서 붙잡고 있다가 테스트는 모두 통과했는데 제출하면 반은 통과를 못했다.
1시간 넘게 고민하다가 다른 사람 풀이를 참고해서 풀었다.
규칙을 좀더 단순하게 생각하자!!