티스토리 뷰

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/77485?language=java# 

 

프로그래머스

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

programmers.co.kr

 

2. 풀이

  • while문을 이용해 첫위치에 돌아올 때까지 위치를 변경한다.
  • 배열을 이용해서 칸의 값을 이동한다. (dirX, dirY)
  • (x1, y1)부터 (x1, y1) 값을 (x1+1, y1)으로 바꾸고, 각 귀퉁이에 오면 방향을 바꿔준다. (dir 변경)

 

3. 코드

class Solution {
    
    public int rotate(int[][] map, int x1, int y1, int x2, int y2){
         
        int x1y1 = map[x1][y1];
        int[] dirX = {0, 1, 0, -1};
        int[] dirY = {1, 0, -1, 0};
        int dir = 1;
        int nowX = x1;
        int nowY = y1;
        int min = x1y1;
        
        // 시계 역방향으로 순환
        while(true){
            if(nowX == x2 && nowY == y1) dir = 0;
            else if(nowX == x2 && nowY == y2) dir = 3;
            else if(nowX == x1 && nowY == y2) dir = 2;
            
            map[nowX][nowY] = map[nowX+dirX[dir]][nowY+dirY[dir]];
            nowX += dirX[dir];
            nowY += dirY[dir];
            min = Math.min(min, map[nowX][nowY]);
            
            if(nowX == x1 && nowY == y1){
                map[x1][y1+1] = x1y1;
                break;
            }
        }
        
        return min;
    }
    
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        
        int[][] map = new int[rows+1][columns+1];
        
        for(int i = 1; i <= rows; i++){
            for(int j = 1; j <= columns; j++){
                map[i][j] = (i-1)*columns + j;
            }
        }
        
        for(int i = 0; i < queries.length; i++){
            answer[i] = rotate(map, queries[i][0], queries[i][1], queries[i][2], queries[i][3]);
        }
        
        
        return answer;
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함