- 우선, n*n배열 생성
- 마지막 끝부터 num을 채워감.
- 배열을 2차원에서 하나로 합치기(flat 함수)
- 이를 left ~ right로 끊어서 return
function solution(n, left, right) {
var answer = [];
//0으로 된 배열 생성 [[0,0,0],[0,0,0],[0,0,0]]
for(var i = 0;i<n;i++){
answer.push(new Array(n).fill(0));
}
var first=0;
var num =1;
while(first!==n){
//행 ++ 열 ++
for(var i = n-1;i>=0;i--){
answer[first][i] = num;
}
for(var i = n-1;i>=0;i--){
answer[i][first] = num
}
first++;
num++;
}
answer = answer.flat().slice(left,right+1);
return answer;
}
결과는 참담했다... 실패 (signal: aborted (core dumped))
이러한 오류는 처음 보았다. 이유가 while문 안에 여러개의 for문.... 벌써부터가 시간복잡도가 걱정된다. 그래서 위에 설계처럼 전부를 구한뒤, Left~Right를 뽑아내지말고 전부 구하는 과정 없이 left~right만을 구하기로 했다.
ex) n = 4, left~right중 i 번째일때
몫이 0인 값은 1234
몫이 1인 값은 2234
몫이 2인 값은 3334
몫이 3인 값은 4444
- 알아낸 규칙
i%4를 했을때 i/4랑 비교해서 작거나 같으면 i/4를 넣고, 아니면 i%4+1넣어라.
function solution(n, left, right) {
var answer = [];
for (var i = left; i<=right;i++){
if(i/n>=i%n){
answer.push(Math.floor(i/n)+1);
}
else{
answer.push(i%n+1);
}
}
return answer;
}
이번 문제는 모든 경우의 수를 다 구하지 않는 것이 중요했던 것 같다.
문제에서 말하고자 하는 규칙을 찾고 이를 이용하여 필요한 것만 간단하게 구해 내는것이 좋다, 이 말을 하고자 하는 문제인 것 같다.