처음 코드
function solution(n, left, right) {
let matrix = new Array(n).fill(0).map(() => new Array(n).fill(0));
for (let i = 0; i < matrix.length; i++) {
for (let j = 0; j < matrix.length; j++) {
if (i >= j) matrix[i][j] = i + 1;
else matrix[i][j] = j + 1;
}
}
matrix = matrix.flat().slice(left, right + 1);
return matrix;
}
문제에서 요구한대로 배열을 만들고 자르고 했는데
이러면 배열의 크기가 너무 커서 오류가 난다
조금 더 빠르게
function solution(n, left, right) {
let arr = [];
for (let i = 0; i < n ** n; i++) {
let count = 1;
for (let j = i + 1; j <= n; count > j ? j++ : (j = j)) {
arr.push(j);
count++;
if (arr.length === right + 1) return arr.slice(left, right + 1);
}
}
}
2차원 배열을 애초에 안만들고
1차원 배열을 쭉 만들면서 right까지 갔을때 더 이상의 배열을 만들지 않고 리턴하게 했지만
이래도 아직 더 빠르게 해야했다
통과 코드
function solution(n, left, right) {
let arr = [];
let remainder = left % n;
for (let i = parseInt(left / n); i < n ** n; i++) {
let count = 1;
for (let j = i + 1; j <= n; count > j ? j++ : (j = j)) {
arr.push(j);
count++;
if (arr.length > right - left + remainder)
return arr.slice(
left - parseInt(left / n) * n,
left - parseInt(left / n) * n + right - left + 1
);
}
}
console.log(arr);
}
배열의 시작점을 left가 속한 행의 처음으로 잡아서 했다
심지어 if (arr.length > right - left + remainder)를 처음에 remainder 대신 n을 더했는데
n이 얼마나 큰지 시간초과가나서 나머지를 더했다
다른 사람 코드
function solution(n, left, right) {
var answer = [];
for (let i = left; i <= right; i++) {
answer.push(Math.max(i % n, parseInt(i / n)) + 1)
}
return answer;
}
'코딩 테스트 > 프로그래머스 level2' 카테고리의 다른 글
[1차] 뉴스 클러스터링 (0) | 2022.09.12 |
---|---|
기능개발 (0) | 2022.09.12 |
위장 (0) | 2022.09.11 |
튜플 (0) | 2022.09.11 |
괄호 회전하기 (0) | 2022.09.10 |