어흥

[프로그래머스] 행렬 테두리 회전하기 (C++) 본문

알고리즘/프로그래머스

[프로그래머스] 행렬 테두리 회전하기 (C++)

라이언납시오 2021. 5. 3. 18:34
728x90
반응형

문제 링크: programmers.co.kr/learn/courses/30/lessons/77485

 

코딩테스트 연습 - 행렬 테두리 회전하기

6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]

programmers.co.kr

1. 주의할 점

- 배열을 시계방향으로 한칸씩만 민다

- 매 쿼리마다 최소값을 초기화하고 시작한다

 

2. 구현

- Arr[][] 배열에 알맞은 숫자들을 미리 할당한다

- Comp() 함수를 통해 최소값을 갱신한다

- 쿼리마다 Mini값을 초기화 시켜준다

- (y1,x1)의 좌표를 Temp에 저장시키고, 중앙을 기준으로 좌하우상 기준으로 한칸씩 민다. 이때, 미는 배열의 원소를 Mini와 비교하여 최소값을 계속 갱신하도록 설정한다

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int arr[100][100];
int mini;

void comp(int val){
    mini = min(mini,val);
}

vector<int> solution(int row, int col, vector<vector<int>> queries) {
    vector<int> answer;
    for(int i=0;i<row;i++)
        for(int j=0;j<col;j++)
            arr[i][j] = i*col+j+1;
    
    for(int k=0;k<queries.size();k++){
        mini = row*col;
        int y1 = queries[k][0]-1;
        int x1 = queries[k][1]-1;
        int y2 = queries[k][2]-1;
        int x2 = queries[k][3]-1;
        int temp = arr[y1][x1];
        comp(temp);
        for(int i=y1;i<y2;i++){
            arr[i][x1]=arr[i+1][x1];
            comp(arr[i+1][x1]);
        }
        for(int j=x1;j<x2;j++){
            arr[y2][j] = arr[y2][j+1];
            comp(arr[y2][j+1]);
        }
        for(int i=y2;i>y1;i--){
            arr[i][x2] = arr[i-1][x2];
            comp(arr[i-1][x2]);
        }
        for(int j=x2;j>x1+1;j--){
            arr[y1][j] = arr[y1][j-1];
            comp(arr[y1][j-1]);
        }
        arr[y1][x1+1]=temp;
        answer.push_back(mini);
    }
    return answer;
}
728x90
반응형
Comments