No Rules Rules

행렬 테두리 회전하기 (feat. 프로그래머스, 77485번) 본문

생활/코테

행렬 테두리 회전하기 (feat. 프로그래머스, 77485번)

개발하는 완두콩 2022. 7. 25. 10:57
728x90
반응형

행렬 테두리 회전하기
https://school.programmers.co.kr/learn/courses/30/lessons/77485

 

프로그래머스

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

programmers.co.kr

반응형
// woohyeon.kim
// https://school.programmers.co.kr/learn/courses/30/lessons/77485
#include <vector>
#include <algorithm>
using namespace std;
int arr[101][101];
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
    int index = 0;
    for(int ix = 1, iy; ix <= rows; ++ix)
        for(iy = 1; iy <= columns; ++iy)
            arr[ix][iy] = ++index;
    
    vector<int> tmp, ans;
    for(const auto& query : queries){
        tmp.clear();
        auto &x1 = query[0], &y1 = query[1], &x2 = query[2], &y2 = query[3];
        // 구간의 값들 가져오기
        for(int y = y1; y < y2; ++y)
            tmp.push_back(arr[x1][y]);
        for(int x = x1; x < x2; ++x)
            tmp.push_back(arr[x][y2]);
        for(int y = y2; y > y1; --y)
            tmp.push_back(arr[x2][y]);
        for(int x = x2; x > x1; --x)
            tmp.push_back(arr[x][y1]);
        ans.push_back(*min_element(tmp.begin(), tmp.end()));        // 최소값
        rotate(tmp.begin(), tmp.end() - 1 , tmp.end());             // 오른쪽으로 한칸 이동
        // 이동된 값들 적용시키기
        index = 0;
        for(int y = y1; y < y2; ++y)
            arr[x1][y] = tmp[index++];
        for(int x = x1; x < x2; ++x)
            arr[x][y2] = tmp[index++];
        for(int y = y2; y > y1; --y)
            arr[x2][y] = tmp[index++];
        for(int x = x2; x > x1; --x)
            arr[x][y1] = tmp[index++];
    }
    return ans;
}
// *&)*@*

 

  1. 주어진 영역을 1차원 배열로 변환하고 오른쪽으로 한칸씩 이동시킵니다.
  2. 이동시킨 1차원 배열을 다시 2차원 배열에 반영시키고 1차원 배열중 최소값을 저장합니다.
728x90
반응형
Comments