[JS] n^2 배열 자르기

yoon·2022년 10월 25일

코딩테스트

목록 보기
6/8

주어진 자연수 n의 n행 n열 2차원 배열을 만들어 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채워 n까지 반복한다. 그리고 이를 1차원 배열로 만들어 주어진 인덱스만큼 잘라낸 값을 리턴하면 된다.

처음에 2차원 배열로 명시되어 있어서 2차원 배열을 만들었으나

function solution(n, left, right) {
    var answer = new Array(n).fill('').map(ele => new Array(n).fill(''))
    
    let output = answer.map((array, index) => {
        return array.map((ele, idx) => index <= idx ? idx + 1 : index + 1)
    }).flat()
    
    return output.slice(left, right + 1)
}


ㅎㅎ.. 저 에러는 메모리를 초과하면 나오는 에러라고 한다

다시 생각하다가 몫과 나머지의 관계를 통해 풀 수 있었다.

function solution(n, left, right) {
    var answer = new Array(n * n).fill('')
    
    let output = answer.map((ele, idx) => {
        return idx % n <= parseInt(idx / n) ? parseInt(idx / n) + 1 : idx % n + 1
    })
    
    return output.slice(left, right + 1)
}

이차원 배열이 일차원 배열로 변했을 때 같은 행이었는지 구분하는 방법은 동일한 몫이 나온 경우이다. 여기서 나머지 값과 비교를 하여 몫보다 작으면 고정된 값을, 몫보다 커지는 순간부터 나머지에서 키워나가면 된다.


헤헤 그래도 나아졌다

내 알고리즘이 맞는 것 같은데 계속 런타임이 나서 어차피 두 번째, 세 번째 파라미터가 인덱스 값이기 때문에 slice()를 이용하지 말고 바로 파라미터에 해당하는 배열을 바로 구해서 풀었다

function solution(n, left, right) {
    let answer = []
    
    for (let i = left; i <= right; i++) {
        i % n <= parseInt(i / n) ? answer.push(parseInt(i / n) + 1) : answer.push(i % n + 1)
    }

    return answer
}


훨 나아졌다 ^_^

profile
얼레벌레 개발자

0개의 댓글