FrontEnd/프로그래머스

[JS] 행렬 테두리 회전하기

728x90

회전시켜주는 함수를 만들어서 회전기능 + 회전할때 값들 중에서 최소값을 저장 하도록 해주었다.

 

1. 문제에서 제공하는데로 1,2,3,4,5,6,7... 로 증가되는 2차원 배열 만들기

2. 시계방향으로 회전시키기 위해서 회전시킬 좌표를 기준으로 반시계의 리스트를 작성

 

반시계로 저장하는 이유는, 반시계로 순서를 짠 이후, 해당 배열을 반시계 방향에서 가져오면 결과적으로 시계방향이 되게 되기 때문

 

3. 리스트를 다 순회하고 최소값을 반환

4. map함수를 이용해서 깔끔하게 정리

 

 

 

어렵다기 보다는 실수가 많이 나올 수 있어서 꼼꼼하게 해결해야 하는 문제였다.

 

 

function solution(rows, columns, queries) {
    const map = [...new Array(rows)].map((_,i) => [...new Array(columns)].map((_,j)=>columns*i+j+1))
    
    const rotate = (query,map) => {
        const [sY,sX,eY,eX] = query.map(v =>v-1)
        const rotateList = []
        const tmp = map[sY][sX]
        let ret = tmp
        
        for (let y = sY;y<=eY;y++) rotateList.push([y,sX])
        for (let x = sX;x<eX;x++) rotateList.push([eY,x])
        for (let y = eY;y>=sY;y--) rotateList.push([y,eX])
        for (let x = eX;x>sX;x-- ) rotateList.push([sY,x])
        
        for (let i = 0 ; i < rotateList.length-1 ; i++) {
            const [y,x] = rotateList[i]
            const [nY,nX] = rotateList[i+1]
            map[y][x] = map[nY][nX]
            ret = Math.min(map[y][x],ret)
        }
        // console.log(rotateList)
        if (rotateList.length){
            const [y,x] = rotateList[rotateList.length-1]
            map[y][x] = tmp
        }
        return ret
    }
    
    return queries.map(query => rotate(query,map))
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 순위 검색  (0) 2023.06.16
[JS] 괄호 회전하기  (0) 2023.06.14
[JS] 두개 이하로 다른 비트  (0) 2023.06.13
[JS] 거리두기 확인하기  (0) 2023.06.13
[JS] 모음 사전  (0) 2023.06.13