무려, n에 들어올 수 있는 수가 10000000까지 되니, 당연히 런타임에러가 나온다. 그럼? 문제에서 제시한 left, right 범위 내 수만 구해야 한다.
function solution(n, left, right) {
//배열 만든 후
//숫자를 채워넣은 후 자른다.
let arr = [];
for(let i=0; i<n; i++){
let front = i+1
let cnt=0;
while(cnt < front){
arr.push(front)
cnt++
}
let rear = i+1;
while(rear < n){
rear++
arr.push(rear)
}
}
return arr.slice(left, right+1)
}
function solution(n, left, right) {
let answer = []
while(left<=right){
answer.push(Math.max(Math.floor(left/n), left%n) + 1)
left++
}
return answer;
}
5의 arr[x][y]
x와 y를 구하는 방법은
x: Math.floor(5/n)
y: 5%n
여기서 n값은 3이니, x는 1이 되고, y는 2가 된다.
실제로 5번째의 좌표값은 arr[1,2]
다.
arr[1][3]
의 값인 4는, 1과 3 중 max값인 3에다가 1을 더하면 구할 수 있다.
arr[3][2]
의 값인 4는, 3과 2중 max값인 3에다가 1을 더하면 구할 수 있다.