본문 바로가기
기초다지기/JS 코딩테스트

javaScript 2차원 배열 자르기 문제

by 김빵그 2024. 1. 11.

입출력 예1
입출력 예2

문제

주어진 규칙에 따라 생성되는 배열 처리하기

풀이 

function solution(n, left, right) {
  let arr = [];
  for (let i = left; i <= right; i++) {
    const row = Math.floor(i / n);  
    const col = i % n;  
    const num = Math.max(row, col) + 1; 
    arr.push(num);
  }

  return arr;
}

//예시 
i=0: row=0, col=0, num=1
i=1: row=0, col=1, num=1
i=2: row=0, col=2, num=1
i=3: row=1, col=0, num=2
i=4: row=1, col=1, num=2
i=5: row=1, col=2, num=2
i=6: row=2, col=0, num=3
i=7: row=2, col=1, num=3
i=8: row=2, col=2, num=3
  • 만약 n이 3이라면 1,2,3,2,2,3,3,3,3 이 되어야 함
  • left 부터 right까지의 범위에서 배열 생성 
  • row : 행 계산 - 현재 인덱스를 N으로 나눈 몫으로 현재 행을 나타낸가
  • col : 열 계산 - 현재 인덱스 n으로 나눈 나머지로 현재 열을 나타낸다
  • num : 해당 위치의 숫자 계산, 현재 위치의 행과 열 중 작은 값에 1을 더한 값  push

다른 풀이

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;
}
  • answer : 결과 저장할 빈배열 
  • for 
    • 각 i에 대해 i % n (나머지)와 parseInt(i / n) (정수 나눗셈) 사이의 최대값을 계산한 후 1을 더해 answer에 추가 
function solution(n, left, right) {
    return new Array(right - left + 1)
                .fill(left)
                .map((v, i) => v + i)
                .map(i => Math.max(Math.floor(i / n + 1), i % n + 1));
}
  • Array : left 값을 가지는 길이가 right - left + 1인 배열 생성
  • map 
    • 배열의 각 요소에 대해 현재값 v와 인덱스 i 을 더한 값을 반환. 기존 배열의 각 요소에 인덱스를 더해 새로운 배열을 생성한다
    • Math... : 앞서 생성한 배열의 각 요소에 대해, 최대값 계산하여 반환

 

'기초다지기 > JS 코딩테스트' 카테고리의 다른 글

javaScript 캐시 계산  (0) 2024.01.15
javaScript 2차원 배열 중복 계산 문제  (0) 2024.01.12
javaScript 분수 덧셈  (1) 2024.01.10
javaScript 연속된 정수의 합  (1) 2024.01.09
javaScript 두 행렬 곱하기  (0) 2024.01.08