프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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. 순회한 값들 중 최솟값 입력
'알고리즘 테스트 ⏲ > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 시소 짝꿍 풀이 / JavaScript (0) | 2023.04.14 |
|---|---|
| [프로그래머스] 연속된 부분 수열의 합 풀이 / JavaScript (0) | 2023.04.13 |
| [프로그래머스] 우박수열 정적분 풀이 / JavaScript (0) | 2023.04.10 |
| [프로그래머스] 전력망을 둘로 나누기 풀이 / JavaScript (0) | 2023.04.08 |
| [프로그래머스] 배달 풀이 / JavaScript (0) | 2023.04.08 |