문제
주어진 규칙에 따라 생성되는 배열 처리하기
풀이
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 |