728x90
반응형
목차
문제
https://school.programmers.co.kr/learn/courses/30/lessons/77485
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 구현 방향
나는 먼저 각 배열의 원소를 순차적으로 담은 뒤에 배열의 현재 인덱스가 queue.length + idx - 1 인덱스를 가르키게끔 만들어 풀었다. 또한 이런식으로 하면 모든 배열을 순회하여 바꾸지 않아도 되기 때문에 시간초과가 나지 않는다.
코드 구현
let dir = [
[1, 0],
[0, 1],
[-1, 0],
[0, -1],
];
var answer = [];
function solution(rows, columns, queries) {
let board = Array.from({ length: rows + 1}, () =>
Array(columns + 1).fill(0)
);
let cnt = 1;
for (let i = 1; i <= rows; i++) {
for (let j = 1; j <= columns; j++) {
board[i][j] = cnt++;
}
}
for (let [y1, x1, y2, x2] of queries) {
let queue = lotate(board, x1, y1, x2, y2);
let ans = Infinity;
for (let idx = 0; idx < queue.length; idx++) {
let [curX, curY, value] = queue[idx];
let [, , preValue] = queue[(queue.length + idx - 1) % queue.length];
board[curY][curX] = preValue;
ans = Math.min(ans, preValue);
}
answer.push(ans);
}
return answer;
}
function lotate(board, x1, y1, x2, y2) {
let queue = [];
let curx = x1;
let cury = y1;
for (let dr of dir) {
while (true) {
let nx = dr[0] + curx;
let ny = dr[1] + cury;
if (nx < x1 || nx > x2 || ny < y1 || ny > y2) break;
curx = nx;
cury = ny;
queue.push([nx, ny, board[ny][nx]]);
}
}
return queue;
}반응형
'PS > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][bfs] 거리두기 확인하기 (0) | 2025.10.07 |
|---|---|
| [프로그래머스][브루트 포스] k진수에서 소수 개수 구하기 (0) | 2025.10.01 |
| [이진 탐색][프로그래머스] 순위 검색 (0) | 2025.09.25 |
| [프로그래머스][union find] 셀 병합 (0) | 2025.09.19 |
| [프로그래머스][백트래킹] 양궁대회 (0) | 2025.09.18 |