새소식

알고리즘 테스트 ⏲/프로그래머스

[프로그래머스] 행렬 테두리 회전하기 풀이 / JavaScript

  • -
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

작성 코드 (1차 시도 / 통과)

function solution(rows, columns, queries) { const result = [] const table = Array.from({length: rows + 1}, () => []) let tdx = 1 // 테이블 값 입력 for (let i = 1; i <= rows; i += 1) { for (let j = 1; j <= columns; j += 1) table[i][j] = tdx++ } // 반 시계로 순회 queries.forEach(query => { const [row, col, drow, dcol] = query let [nr, nc] = [row, dcol] // 현재 위치 (오른쪽 위부터) const cddt = [table[nr][nc]] // 시작 위치 값 저장 while (nc > col) cddt.push(table[nr][nc] = table[nr][--nc]) while (nr < drow) cddt.push(table[nr][nc] = table[++nr][nc]) while (nc < dcol) cddt.push(table[nr][nc] = table[nr][++nc]) while (nr > row) cddt.push(table[nr][nc] = table[--nr][nc]) table[nr + 1][nc] = cddt[0] // 시작 위치 값 입력 result.push(Math.min(...cddt)) // 회전 요소 중 최솟값 }) return result }

 

구현 로직

시작 위치는 오른쪽 위부터 반시계로 돌면서 앞의 값을 현재 위치에 저장하면서 순회합니다.

위 테이블에서 10이 시작이라면 우선 10을 미리 저장해놓고 9를 현재 자리에 놓고 이동, 9 자리에는 앞의 수 8을 놓고 이동하는 식으로 순회하면서 전체 값을 한칸씩 이동시켜줍니다.

 

1. 테이블 값 입력 (1 ~ n)

2. 각 query에 대하여 회전 수행 (반시계로 돌면서 값을 한칸씩 이동)

3. 순회한 값들 중 최솟값 입력

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.