Algorithm & 자료구조/알고리즘 w.JavaScript

[알고리즘 JS] n^2 배열 자르기 (프로그래머스 Lv.2)

프라이D 2023. 1. 31. 01:50

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

function solution(n, left, right) {
  let answer = [];

for (let i = left; i <= right; i++) {
    answer.push(Math.max(Math.floor(i / n), i % n) + 1);
  }
    
  return answer;
}
  • left 에서 right 만큼의 범위를 반복하면서 현재 위치인 i를 구해준다.
  • 2차원 배열의 각 좌표에는 행 번호가 들어가거나, 현재 열 번호 둘 중 더 큰 값이 들어가게 된다.
  • 예를 들여 현재 i 가 3이라면 arr[i][i] 까지는 3이 들어가고, 그 뒤부터는 4,5 ... 이렇게 열 번호가 들어가게 된다.
  • 현재 위치 i를 기준으로 행과 열을 구하는 방법은 아래와 같다. 이 두 값을 구해 더 큰 쪽을 1차원 배열에 push 하면 된다. 
    • 행 : Math.floor(i/n)
    • 열 : i % n
  •  처음에 lt의 좌표값을 구해 2차원 배열을 만든 뒤 직접 값을 구하려고 했는데, 해당 좌표의 값에서 규칙을 찾을 수 있기 때문에 몇 행 몇 열에 위치한 값이 어떠한 값인지만 잘 파악하면 풀 수 있는 문제였음