[프로그래머스 level2] n^2 배열 자르기

김예지·2021년 10월 22일
0

문제

https://programmers.co.kr/learn/courses/30/lessons/87390


문제 풀이

코드(실패)

function solution(n, left, right) {
    if(n===1) return 1;
    let arr=Array.from(Array(n), ()=>Array(n));
    for(let i=0; i<n; i++){
        for(let j=0; j<i+1; j++){
            if(typeof arr[i][j]==='undefined') arr[i][j]=i+1;
            if(typeof arr[j][i]==='undefined') arr[j][i]=i+1;
        }
    }
    return arr.flat().slice(left, right+1);
    
}

'signal: aborted(core dumped)'라는 오류(찾아보니 치명적인 오류라고 한다)가뜬다.

이게 왜 그런지 찾는 과정에서, 배열요소에 0을 넣는과정(Array(n).fill(0))에서 이런 에러가 발생할 수 있다고 해서 if(arr[i][j]===0)을 위와같이 배열이 비어있는지 확인해보는 코드로 바꿔봤는데, 안된다...
일단 이 질문에 대한 해답은 아직 찾지못했다. 문제 '질문하기'에 글을 적어놨으니, 나중 확인해보자.
이 분의 글 을 참고해보면, n이 10^7까지 input으로 들어오기 때문에 문제에서 나온대로 n*n 2차원 배열을 만든 후 1차원배열을 만들면 효율성 테스트에서 통과하지 못한다고 되어있다. (하긴 n이 10^7이면 n*n하면 효율성 통과 못하는것도 당연할듯) 에러메시지인 core dumped를 검색해보면 인풋이 잘못되어서 생기는 에러라는 말도 있었는데, 이러한 이유라면 이해가 된다.

코드

function solution(n, left, right) {
    const ans = [];

    while (left <= right) {
        ans.push(Math.max(Math.floor(left / n), left++ % n) + 1);
    }

    return ans;
}

이분의 코드를 참고했다. 아니 어떻게 이런 규칙성을 찾아내실 수 있지...?
내 코드가 답이 안보이면, 싹 다 지우고 새로운 규칙성을 찾아내자!


참고

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

0개의 댓글