반응형
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/77485
2. 코드
문제 설명에 있던 이 부분은 분명 문제 풀 때 쓰일 것 같더니, 각 배열 요소에 자리에 맞는 값을 넣어줄 때 사용하라는 힌트였다.
길이가 100까지로 제한되어 있으니, 직접 배열을 만들어 숫자를 옮겨주는 방식을 사용해도 되었던 문제다. 괜히 타임아웃 뜰까봐 배열 만들까말까 우물쭈물 망설였네^^7 머쓱...
function solution(rows, columns, queries) {
const answer = [];
// 숫자가 1부터 시작하므로 +1 씩 더한 만큼의 배열 길이로 세팅
let arr = Array.from({length : rows + 1}, () =>
new Array(columns + 1).fill(0)
);
// 숫자 채우기
for (let i = 1; i <= rows; i++) {
for (let j = 1; j <= columns; j++) {
arr[i][j] = (i - 1) * columns + j;
}
}
for (let el = 0; el < queries.length; el++) {
const [x1, y1, x2, y2] = queries[el];
const stack = []; // 숫자 옮길 수 있게 순서대로 쌓아 저장
// 맨 위 직사각형
for (let i = y1; i < y2; i++) stack.push(arr[x1][i]);
// 오른쪽 직사각형
for (let i = x1; i < x2; i++) stack.push(arr[i][y2]);
// 아래쪽 직사각형
for (let i = y2; i > y1; i--) stack.push(arr[x2][i]);
// 왼쪽 직사각형
for (let i = x2; i > x1; i--) stack.push(arr[i][y1]);
// 가장 작은 수 찾기
answer.push(Math.min(...stack));
// x1,y1에 stack의 가장 마지막 값 먼저 넣어주기
const temp = stack.pop();
stack.unshift(temp);
// stack의 맨 앞 값 넣어주기
for (let i = y1; i < y2; i++) arr[x1][i] = stack.shift();
for (let i = x1; i < x2; i++) arr[i][y2] = stack.shift();
for (let i = y2; i > y1; i--) arr[x2][i] = stack.shift();
for (let i = x2; i > x1; i--) arr[i][y1] = stack.shift();
}
return answer;
}
이해에 도움이 된 블로그)
복기
7/5
반응형
'프로그래머스 > 구현' 카테고리의 다른 글
[구현] 프로그래머스 '줄 서는 방법' - js (0) | 2023.05.18 |
---|---|
[구현] 프로그래머스 '수식 최대화' - js (0) | 2023.05.15 |
[구현] 프로그래머스 '방금그곡' - js (1) | 2023.05.13 |
[투포인터] 프로그래머스 '연속된 부분 수열의 합' - js (0) | 2023.05.10 |
[투포인터] 프로그래머스 '보석 쇼핑' - js (1) | 2023.05.09 |