728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/77485
문제 풀이 방법
이 문제는 2차원 배열 문제이며 행열의 회전 중 특정 행열의 범위만 회전하는 문제였다.
나는 실제 행렬을 회전하며 최소값을 찾는 과정을 구현했다.
내가 작성한 코드보다 더 깔끔해 보이는 코드를 발견해서 내 코드밑에 작성해 두겠다.
완성된 코드
const solution = (rows, columns, queries) => {
let answer = [];
let query = Array.from({length: rows}, (_, i) => Array.from({length: columns}, (_, idx) => (idx + 1) + (i * columns)));
const rot = (order) => {
let newArr = Array.from({length: rows}, (_, i) => query[i].slice());
const [sy, sx, ey, ex] = order;
let smallest = 0;
const check = (n) => {
if(smallest === 0) {
smallest = n;
}
else if(n < smallest) {
smallest = n;
}
}
// 맨 윗줄 시계 방향으로 돌리기(맨 왼쪽은 제외)
for(let j=sx; j<ex; j++){
newArr[sy-1][j] = query[sy-1][j-1];
check(newArr[sy-1][j]);
}
for(let j=sy; j<ey; j++){
newArr[j][ex-1] = query[j-1][ex-1];
check(newArr[j][ex-1]);
}
for(let j=ex-2; j>sx-2; j--){
newArr[ey-1][j] = query[ey-1][j+1];
check(newArr[ey-1][j]);
}
for(let j=ey-2; j>sy-2; j--){
newArr[j][sx-1] = query[j+1][sx-1];
check(newArr[j][sx-1]);
}
answer.push(smallest);
return newArr;
}
// queries 길이가 1일 경우는 처음 시작하는 값을 넣어주면 시간 절약 가능
for(let i=0; i<queries.length; i++){
const newQuery = rot(queries[i]);
query = newQuery;
}
return answer;
}
참고한 코드
function solution(rows, columns, queries) {
const a = [...Array(rows)].map((_, r)=>[...Array(columns)].map((_, c)=>r*columns+c+1));
const mins = [];
queries.map(query => {
const [x1, y1, x2, y2] = query.map(_=>_-1);
let min = a[x1][y1], tmp = a[x1][y1];
for(let i=x1;i<x2;i++) {
a[i][y1] = a[i+1][y1];
min = Math.min(min, a[i][y1]);
}
for(let i=y1;i<y2;i++) {
a[x2][i] = a[x2][i+1];
min = Math.min(min, a[x2][i]);
}
for(let i=x2;i>x1;i--) {
a[i][y2] = a[i-1][y2];
min = Math.min(min, a[i][y2]);
}
for(let i=y2;i>y1;i--) {
a[x1][i] = a[x1][i-1];
min = Math.min(min, a[x1][i]);
}
a[x1][y1+1] = tmp;
mins.push(min);
})
return mins;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 1Level / 해시 / 폰켓몬 (0) | 2023.10.27 |
---|---|
[JS] 1Level / 연습문제 / 카드 뭉치 (0) | 2023.10.27 |
[JS] 1Level / 연습문제 / 명예의 전당(1) (0) | 2023.10.24 |
[JS] 3Level / 연습문제 / 하노이의 탑 (0) | 2023.10.23 |
[JS] 3Level / 연습문제 / 숫자 타자 대회 (1) | 2023.10.20 |