티스토리 뷰
반응형
생각
처음에 완전 복잡하게 생각했다. 상하좌우로 나누어서 각각 시작점, 끝점을 구해서 상, 하는 n크기로, 좌, 우는 m크기로 쪼개고 바뀔 2차원 배열의 전체를 갈아끼우는 방식으로 접근했는데 너무 복잡해지고 코드도 난해해졌다.
한칸씩 밀고 내리기만 하면 되므로 좌상단의 값을 기억해두었다가 왼쪽 열을 위로올리고 아랫 행을 왼쪽으로 당기고 우측 열을 아래로 내리고 마지막으로 최상단 행을 오른쪽으로 미는 식으로 구현하면 해결할 수 있었다.
코드
const makeMatrix = (rows, columns) => {
let matrix = []
for (let i = 0; i < rows; i++){
matrix.push([]);
}
let num = 1;
for (let i = 0; i < rows * columns; i++){
matrix[Math.floor(i / columns)].push(num);
num += 1;
}
return matrix;
}
function solution(rows, columns, queries) {
var answer = [];
let matrix = makeMatrix(rows, columns);
for (let i = 0; i < queries.length; i++){
let [x1, y1] = [queries[i][0] - 1, queries[i][1] - 1];
let [x2, y2] = [queries[i][2] - 1, queries[i][3] - 1];
let tmp = matrix[x1][y1];
let candi = [tmp];
for (let i = x1; i < x2; i++){
matrix[i][y1] = matrix[i + 1][y1];
candi.push(matrix[i + 1][y1])
}
for (let i = y1; i < y2; i++){
matrix[x2][i] = matrix[x2][i + 1];
candi.push(matrix[x2][i + 1])
}
for (let i = x2; i > x1; i--){
matrix[i][y2] = matrix[i - 1][y2];
candi.push(matrix[i - 1][y2])
}
for (let i = y2; i > y1; i--){
matrix[x1][i] = matrix[x1][i - 1];
candi.push(matrix[x1][i - 1])
}
matrix[x1][y1 + 1] = tmp;
answer.push(Math.min(...candi));
}
return answer;
}
반응형
'문제풀이' 카테고리의 다른 글
백준 2470 G5 두용액 (투포인터) (0) | 2021.09.26 |
---|---|
백준 1806 부분합 G4 (0) | 2021.09.26 |
프로그래머스 베스트앨범 (hash) lv3 (0) | 2021.09.15 |
프로그래머스 다음 큰 숫자 (구현) lv2 (0) | 2021.09.15 |
프로그래머스 위클리챌린지 5주차_모음사전 (dfs) (0) | 2021.09.15 |
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
농담곰의 고군분투 개발기