티스토리 뷰

반응형

죄금 시간이 걸렸지만... 다른 분들도 일일이 회전시킨거 같아서 조금 맘이 놓이는 문제...ㅎ

 


문제의 조건

 

1. rows x columns 행렬이 있고

회전시킬 값을 저장한 2차원 배열 queries가 주어짐 

 

2. rows와 columns만 주어지기 때문에 주어진 가로 세로값으로 회전시킬 보드판을 직접 만들어야 함

 

3. queries의 값들로 만들어지는 사각형 테두리에 있는 원소들만 시계 방향으로 회전시키는데...

그 중에서 최소값을 배열에 담아서 리턴하기 

 

4. 문제에서 x, y 값을 상당히 헷갈리게 적어놔서 디버깅하면서 x, y 인덱스값을 잘 구하는지 확인해야 함...

 

5. 회전 순서 

회전을 시작할 인덱스를 먼저 구한 뒤 현재값을 저장할 변수에 저장한다. 

시작 인덱스의 원소를 최소값으로 지정한다. 

➡️ ⬇️ ⬅️ ⬆️ 순서로 보드판을 탐색하면서 다음으로 탐색해야 할 인덱스의 원소를 다른 변수에 저장한다. 

다음 원소와 현재 최소값을 비교해서 최소값을 구한다. 

다음 인덱스의 원소를 현재 인덱스 값으로 바꾼다.

현재값을 아까 저장해놨던 다음값으로 바꾼다. 

 


 

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
    vector<vector<int>> board(rows);
    int a = 1;
    for (int y = 0; rows > y; y++)
    {
        for (int x = 0; columns > x; x++)
            board[y].push_back(a++);
    }

    vector<int> answer;
    for (int i = 0; queries.size() > i; i++)
    {
        int x = queries[i][1] - 1; //시작 인덱스 구하기 
        int y = queries[i][0] - 1; //1씩 빼줘야 실제 배열 인덱스가 됨 
        int width = queries[i][3] - queries[i][1]; //가로 길이
        int height = queries[i][2] - queries[i][0]; //세로 길이 
        //시작 인덱스의 원소값을 최소값으로 저장한 다음에 회전시키면서 최소값 비교 
        int cur = board[y][x];
        int minNum = cur;
        for (int j = 0; width > j; j++, x++)
        {
            int next = board[y][x + 1];
            minNum = min(minNum, next);
            board[y][x + 1] = cur;
            cur = next;
        }

        for (int j = 0; height > j; j++, y++)
        {
            int next = board[y + 1][x];
            minNum = min(minNum, next);
            board[y + 1][x] = cur;
            cur = next;
        }

        for (int j = 0; width > j; j++, x--)
        {
            int next = board[y][x - 1];
            minNum = min(minNum, next);
            board[y][x - 1] = cur;
            cur = next;
        }

        for (int j = 0; height > j; j++, y--)
        {
            int next = board[y - 1][x];
            minNum = min(minNum, next);
            board[y - 1][x] = cur;
            cur = next;
        }

        answer.emplace_back(minNum);
    }
    return answer;
}
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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 29 30 31
글 보관함