문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
(1) 2차원 배열의 행(row) 개수를 계산한다.
- 주어진 상자 개수(n)와 한 줄에 배치할 수 있는 개수(w)를 이용해 전체 행(row) 수를 구한다.
(2) 택배 상자를 저장할 2차원 배열을 생성하고 0으로 초기화한다.
- w개의 열을 가진 row개의 행을 만들어, 모든 값을 초기 상태(0)로 채운다.
(3) 짝수 행은 정방향, 홀수 행은 역방향으로 1부터 n까지 순차적으로 저장한다.
- 상자를 채울 때, 짝수 행은 왼쪽에서 오른쪽(정방향), 홀수 행은 오른쪽에서 왼쪽(역방향) 으로 채운다.
- 이 과정에서 찾고자 하는 숫자(num)가 등장하면, 해당 열(column) 인덱스를 기록해둔다.
- n을 초과하는 경우 더 이상 저장할 필요가 없으므로 반복을 종료한다.
(4) 기록해둔 인덱스를 활용해, 해당 열(column)에 있는 값 중 num보다 큰 값의 개수를 구한다.
- 저장된 행렬에서 num이 위치한 열(column)을 찾아, num 이상의 값이 몇 개인지 계산하여 반환한다.
solution = (n, w, num) => {
const row = Math.ceil(n / w);
const box = Array.from({length: row}, () => new Array(w).fill(0));
let packageIdx = 0;
let increamentNum = 1;
for (let i = 0; i < row; i++) {
for (let j = 0; j < w; j++) {
if (increamentNum > n) break;
const col = i % 2 === 0 ? j : w - j - 1;
box[i][col] = increamentNum;
if (increamentNum === num) packageIdx = col;
increamentNum++;
}
}
return box.filter(row => row[packageIdx] >= num).length;
}
결론
2025 프로그래머스 코드챌린지 2차 예선 문제를 풀어보았다.
문제 이해가 쉬워 빠르게 구현할 수 있었다.
'코딩테스트' 카테고리의 다른 글
[백준] 포스택 (JS) (0) | 2025.03.16 |
---|---|
[백준] 보물 (JS) (0) | 2025.03.14 |
[프로그래머스] 유연근무제 (JS) (0) | 2025.03.11 |
[백준] 국회의원 선거 (JS) (0) | 2025.03.06 |
[백준] 프린터 큐 (JS) (0) | 2025.03.04 |