정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.
난이도는 그렇게 높지 않은 것 같지만 꽤 고려해야 할 사항이 많은 문제이다. 우선 처음 문제를 풀 때에는 N x N 배열을 모두 만들어서 left와 right를 잘라서 반환하였다. 하지만 프로그래머스 문제를 풀면서 생판 처음보는 에러가 나왔다. 뭔가 수가 10^7까지 N의 값이 될 수 있음을 보고 이건 무조건 배열을 다 제작하라는 것이 아님을 깨달았다.
따라서 우리가 구하고자 하는 것은 left부터 right까지이기 때문에 left가 포함된 행과 right가 포함된 행까지만 반복문을 돌리면 된다.
splice 메서드를 사용하면 배열의 S번째 index부터 C개를 잘라서 반환한다. splice 메서드는 기존 배열에 영향을 준다.
function solution(n, left, right) {
let arr = [];
// N x N 배열 전체말고 구하고자 하는 부분만 체크한다
for(let i=Math.floor(left/n); i<=Math.floor(right/n); i++){
for(let j=0; j<n; j++){
if(i === j) arr.push(i+1); // 배열의 대각선 부분이다
else if(i > j) arr.push(i+1); // 대각선을 기준으로 왼쪽이다
else if(i < j) arr.push(j+1); // 대각선을 기준으로 오른쪽이다
}
}
return arr.splice(left%n, right-left+1);
}