[Programmers]Lv2_행렬 테두리 회전하기_JavaScript
전체 소스 코드
function solution(rows, columns, queries) {
let answer = [];
let myArray = Array.from(new Array(rows), () => new Array(columns).fill(1))
.map((row, r) => row.map((v, c) => (r * columns) + (c + 1)));
for (let query of queries) {
let row1 = query[0]-1;
let col1 = query[1]-1;
let row2 = query[2]-1;
let col2 = query[3]-1;
let tmpArr = new Array();
for (let idx = col1; idx < col2; idx++) { tmpArr.push(myArray[row1][idx]); }
for (let idx = row1; idx < row2; idx++) { tmpArr.push(myArray[idx][col2]); }
for (let idx = col2; idx > col1; idx--) { tmpArr.push(myArray[row2][idx]); }
for (let idx = row2; idx > row1; idx--) { tmpArr.push(myArray[idx][col1]); }
tmpArr.unshift(tmpArr.pop());
let cnt = 0;
for (let idx = col1; idx < col2; idx++) { myArray[row1][idx] = tmpArr[cnt++]; }
for (let idx = row1; idx < row2; idx++) { myArray[idx][col2] = tmpArr[cnt++]; }
for (let idx = col2; idx > col1; idx--) { myArray[row2][idx] = tmpArr[cnt++]; }
for (let idx = row2; idx > row1; idx--) { myArray[idx][col1] = tmpArr[cnt++]; }
answer.push(Math.min(...tmpArr));
}
return answer;
}
문제 설명
rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다.
이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현합니다.
행렬의 rows, columns, 그리고 회전들의 목록[(x1, y1, x2, y2), ... ]이 주어질 때, 각 회전들을 행렬에 적용한 뒤, 그 회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 배열에 넣어 return하는 문제입니다.
입출력 예시
rows | columns | queries | result |
---|---|---|---|
6 | 6 | [[2,2,5,4],[3,3,6,6],[5,1,6,3]] | [8, 10, 25] |
- 예시의 회전 목록을 수행하는 과정을 그림으로 표현하면 다음과 같습니다.
문제 자체는 어렵지 않았으나, 배열 선언 및 초기화 과정에서 ES6 문법에 익숙해지고 또한 아름다운 코드를 짜보자는 욕심에 강아지 고생을 하게 되었습니다.
이를 오래 기억하며 더욱 학습하자는 의미로 포스팅합니다.
참고 사이트:
프로그래머스 - 행렬 테두리 회전하기
Author And Source
이 문제에 관하여([Programmers]Lv2_행렬 테두리 회전하기_JavaScript), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minukbak/303저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)