문제설명
n^2 배열 자르기는 정수 n, right, left이 주어지고 n행 n열의 1부터 n까지 정수로 채워진 2차열 배열의 right ~ left까지의 1차원 배열을 반환하는 문제이다.
문제가 잘 이해되지 않았지만 시뮬레이션 그림을 보고 이해했다.
ex)
 ## 문제 해결 1. 배열을 직접 그려보니 반환해야 하는 배열 `[3,2,2,3]`는 2차원 배열의 인덱스 `[[0,2],[1,0],[1,1],[1,2]]`의 좌표를 지니고 있고 좌표 내에서 가장 큰 수에 1을 더한 값과 항상 같다는 점을 알아냈다. 2. 행은 2차원 배열에서 외부 배열의 인덱스, 열은 내부 배열의 인덱스이다.`left ~ right`까지의 인덱스를 `index`, 산출할 결과는 `num`이라고 가정하고 `(행, 열) => (x, y)`로 대입했을 때 아래와 같은 공식이 나온다.
let x = Math.floor(index / n)
// 인덱스를 주어진 n으로 나누고 내림 => 행
let y = index % n
// 인덱스를 주어진 n으로 나머지 연산 => 열
let num = Math.max(x, y) + 1
// 구하고자 하는 값 = 행과 열 중 가장 큰 값에 1을 더한다.
알아낸 공식을 대입하니 반복문을 통해 반환할 배열에 값을 넣어주기만 하면 되는 간단한 문제였다. 힌트를 찾아봤지만 봐도 이해가 되지 않아 그려서 직접 대입해보니 그제서야 깨달은 공식이다.
function solution(n, left, right) {
const arr = [];
for (let i = left; i <= right; i++) {
let x = Math.floor(i/n),
y = i%n;
arr.push(Math.max(x,y)+ 1)
}
return arr;
}
![[Algorithm] n^2 배열 자르기](https://velog.velcdn.com/images/modac42asdfadsf/post/b3ec4cd7-388f-4277-a098-3904be0ab2d6/image.gif)