⭐️ [프로그래머스 레벨투] 행렬 테두리 회전하기 🔄
23771 단어 코딩테스트행렬 테두리 회전하기프로그래머스코딩테스트
🔽 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/77485
✍🏼 나의 수도 코드
1) 주어진 rows와 columns로 기본 행렬을 만든다.
2) 회전 함수 rotate를 만든다.
3) rotate는 회전 대상이 되는 요소들을 배열에 담아둔다.
4) rotate를 통해 행렬을 회전시킨다.
5) 배열에 담아둔 요소들중 가장 작은 요소를 minItems 배열에 push하고, 회전이 완료된 행렬로 전역의 matrix를 재할당한다.
6) 반복문을 돌려 queries 매개변수에 넘겨받은 전달인자들로 rotate를 실행한다.
7) minItems를 리턴한다.
👨🏻💻 나의 문제 풀이
function solution(rows, columns, queries) {
let minItems = [];
let matrix = [];
let basicRow = [...Array(columns)].map((_, i) => i + 1);
for(let i = 0; i < rows; i++){
let newRow = basicRow.map(item => item + columns * i)
matrix.push(newRow)
}
function rotate(x1, y1, x2, y2){
let saveArr = [];
let copyMatrix = matrix.map(item => item.slice());
for(let i = y1; i < y2; i++){
saveArr.push(matrix[x1 - 1][i])
copyMatrix[x1 - 1][i] = matrix[x1 - 1][i - 1];
}
for(let i = x1; i < x2; i++){
saveArr.push(matrix[i][y2 - 1])
copyMatrix[i][y2 - 1] = matrix[i - 1][y2 - 1];
}
for(let i = y1 - 1; i < y2 - 1; i++){
saveArr.push(matrix[x2 - 1][i])
copyMatrix[x2 - 1][i] = matrix[x2 - 1][i + 1];
}
for(let i = x1 - 1; i < x2 - 1; i++){
saveArr.push(matrix[i][y1 - 1])
copyMatrix[i][y1 - 1] = matrix[i + 1][y1 - 1];
}
minItems.push(Math.min(...saveArr));
matrix = copyMatrix;
}
for(let i = 0; i < queries.length; i++){
rotate(...queries[i]);
}
return minItems;
}
👩🏻💻 다른 사람의 코드
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;
}
🍯 알게 된 것들
- 2차원 배열 깊은 복사할 때는, 그냥 arr.slice를 하면 안 되고, 내부 배열들까지 일일이 slice를 해주어야 한다.
const copy = arr.map(v => v.slice());
- 1부터 n을 요소로 갖는 배열 만들기, 암기!
[...Array(n)].map((_, i) => i + 1)
Author And Source
이 문제에 관하여(⭐️ [프로그래머스 레벨투] 행렬 테두리 회전하기 🔄), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@9rganizedchaos/프로그래머스-레벨투-행렬-테두리-회전하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)