알고리즘
프로그래머스 JS | 행렬 테두리 회전하기
3jun
2022. 7. 6. 16:25
출처: 프로그래머스 - 코딩테스트 연습 - 2021 Dev-Matching: 웹 백앤드 개발 - 행렬 테두리 회전하기
https://school.programmers.co.kr/learn/courses/30/lessons/77485
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
로직은 생각보다 어렵지 않을 것이라고 생각했는데, 코드를 작성하다보니 코드가 길어져 어려움을 겪었던 문제이다.
거의 하루 종일 코드를 작성했는데, 테스트 케이스만을 겨우 넘기고 정확성을 9.1 밖에 나오지 않았던 문제이다.
❌ Solution (정확성 9.1점)
function solution (rows, columns, queries) {
const answer = [];
// 1. 행렬 생성
let matrix = Array(rows).fill(0).map((_,i) => Array(columns).fill(0).map((_, j) => i * columns + j + 1));
// 2. queries 돌리기
for( let i = 0; i < queries.length; i++) {
const [x, y, xx, yy] = queries[i];
rotate(x-1, y-1, xx-1, yy-1);
}
// 3. queries 에 맞춰서 회전(rotate 시키기)
function rotate(x, y, xx, yy) {
let cur = matrix[x][y];
let next;
let min = cur;
for(let i = y+1; i <= yy; i++){
next = matrix[x][i];
matrix[x][i] = cur;
cur = next;
if( cur < min) min = cur;
}
for(let i = x+1; i <= xx; i++) {
next = matrix[i][yy];
matrix[i][yy] = cur;
cur = next;
if( cur < min) min = cur;
}
for(let i = yy-1; i > y-1; i--) {
next = matrix[xx][i];
matrix[xx][i] = cur;
cur = next;
if( cur < min) min = cur;
}
for(let i = xx-1; i > x-1; i--) {
next = matrix[i][x];
matrix[i][x] = cur;
cur = next;
if( cur < min) min = cur;
}
answer.push(min);
}
return answer;
}
💡 matrix를 콘솔창에서 확인을 할 때, 모든 queries[i]에 해당하는 반복문을 실행 시킨 결과가 콘솔에 출력되는데, 첫번째 queries 작업만 실행 시킨 값으로 기대하고 체크하여 잘못된 부분을 쉽게 찾지 못했다.
✅ 내가 작성한 코드가 무엇이 어디가 틀린 것인지 잘 이해가 되지 않는다.