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

이유정·2023년 6월 7일
0

무려, n에 들어올 수 있는 수가 10000000까지 되니, 당연히 런타임에러가 나온다. 그럼? 문제에서 제시한 left, right 범위 내 수만 구해야 한다.

틀린 풀이 코드

function solution(n, left, right) {
 //배열 만든 후 
 //숫자를 채워넣은 후 자른다. 
    let arr = [];
    for(let i=0; i<n; i++){
        let front = i+1
        let cnt=0; 
        while(cnt < front){
            arr.push(front)
            cnt++
        }
        let rear = i+1; 
        while(rear < n){
            rear++
            arr.push(rear)
        }
    }
    return arr.slice(left, right+1)
}

정답 풀이 코드

function solution(n, left, right) {
   let answer = [] 
   while(left<=right){
       answer.push(Math.max(Math.floor(left/n), left%n) + 1)
       left++
   }
    return answer; 
}

문제 풀이 설명


5의 arr[x][y] x와 y를 구하는 방법은
x: Math.floor(5/n)
y: 5%n
여기서 n값은 3이니, x는 1이 되고, y는 2가 된다.
실제로 5번째의 좌표값은 arr[1,2]다.

arr[1][3]의 값인 4는, 1과 3 중 max값인 3에다가 1을 더하면 구할 수 있다.
arr[3][2]의 값인 4는, 3과 2중 max값인 3에다가 1을 더하면 구할 수 있다.

profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글