
아니 뭔놈의 문제가 이래 복잡해...
왼쪽위부터 오른쪽 아래로 1, 2, 3, 4... 로 채우고
윗줄의 마지막과 아랫줄의 처음을 이어서 하나의 배열로 만들고
left~right로 잘라낸 배열을 출력해내라는 것이다.

function solution(n, left, right) {
let roop = 0
for (roop = 0 ; n*roop <= right ; roop++){}
let row = []
for ( let i = 1 ; i <= n ; i++) {
row.push(i)
}
let fullRow = [...row]
for ( let i = 1 ; i <= roop ; i++) {
for ( let j = 0 ; j < i ; j++) {
row[j]++
}
fullRow = [...fullRow,...row]
}
const answer = fullRow.slice(left,right+1)
return answer
}

내가 생각해도 객체 분해할당을 너무 자주쓰긴했다...
우선 이중 반복문부터 어떻게 처리를 해야한다.
function sol0(n, left, right) {
let answer = []
for (let i = left ; i <= right ; i++) {
const share = parseInt(i/n)
const remainder = i%n
if (share <= remainder) {
answer.push(remainder+1)
} else {
answer.push(share+1)
}
}
return answer
}
처음하고 완전히 달라진것 같지만 더 좋은 결과물이 나왔으니 만족한다.
function sol1(n, left, right) {
var answer = [];
for (let i = left; i <= right; i++) {
answer.push(Math.max(i % n, parseInt(i / n)) + 1)
}
return answer;
}
Math.max 로 구현했다.const sol2 = (x,y,z) => Array.from({length:z-y+1},(_,index)=>(index+y)%x<parseInt((index+y)/x)+1?parseInt((index+y)/x)+1:(index+y)%x+1)
역시 화살표 함수로 한줄로 구현했다.
모두 의 복잡도를 가진다.

최악의 경우를 보기 위해 의도적으로 left는 0 right는 n^2으로 설정하였다.

화살표함수에 삼항연산자를 넣은 것이 너무 압도적으ㅡ로 느렸다.

n의 값이 10배 증가할 시(=처리해야할 양 100배 증가)
sol2가 sol0,1에 비해서 절반만 증가하지만 기본시간이 5.5배가 넘기 때문에 의미가 없다...
시간복잡도상으로는 100배 정도 증가해야하는데 200배가 증가한것을 보면 역시 시간복잡도는 대략적인 것인게 확실해보인다.