👍🏻 2022년 2월 8일
<script>
function solution(n, left, right) {
let emptyArr = new Array(n).fill().map((_,i) => Array(n))
let num = 1;
while (num <= n) {
for (let i=0; i<n; i++) {
for (let j=0; j<n; j++) {
emptyArr[i][j] = num;
emptyArr[j][i] = num;
}
num++
}
}
return emptyArr.flat().slice(left, right+1);
}
</script>
<script>
function solution(n, left, right) {
let answer = [];
let firstLine = parseInt(left/n);
let lastLine= parseInt(right/n);
let startNum = firstLine+1;
for (let row=firstLine; row<=lastLine; row++){
for (let i=0; i<startNum; i++) {
answer.push(startNum);
}
let nextNum = startNum;
for (let i=startNum; i<n; i++) {
answer.push(++nextNum);
}
startNum++;
}
return answer.slice(left%n, left%n + (right-left+1));
}
</script>
처음엔 n X n 크기의 2차원 배열을 만들어서 값을 넣고, 1차원 배열로 변환한 다음에 left, right에 맞게 잘랐다.
근데 이렇게 하니까 signal: aborted (core dumped) 에러가 났다.
제한사항 보면 n의 최대값이 10^7이라서 n X n 으로 만들면 크기가 너무 커져서 에러가 나는 것 같았다.
left ~ right에 해당하는 배열만 만든다면 더 완벽했겠지만 방법을 모르겠어서 그냥 left랑 right가 있는 row를 포함해서 그 사이의 row들의 값을 구하는 방식으로 다시 풀었다.
다행히 바로 100점 받았다~