새소식

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

[프로그래머스] 행렬 테두리 회전하기 풀이 / 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

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

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