본문 바로가기
문제 풀이/프로그래머스 (Programmers)

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

by 희조당 2021. 10. 12.
728x90

https://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


 문제 풀이

쉬운 편의 구현 문제이다.

map[x1][y1+1]에서 값이 다르기 때문에 마지막에 추가해주는 것만 조심하면 된다.

 느낀 점

처음에는 너무 간단한 구현이지만 코드가 길어서 의심을 했다. 근데 정말 저게 다다!

 코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int map[101][101];

void reset(int rows, int columns) {
    int num = 1;
    for (int i = 1; i <= rows;i++) {
        for (int j = 1; j <= columns;j++) {
            map[i][j] = num++;
        }
    }
}

int get_num(vector<int> query) { // 2, 2, 5, 4
    int result = 10001;
    int tmp = map[query[0]][query[1]];

    for (int i = query[0]; i < query[2]; i++) {
        map[i][query[1]] = map[i + 1][query[1]];
        result = min(result, map[i][query[1]]);
    }

    for (int i = query[1]; i < query[3]; i++) {
        map[query[2]][i] = map[query[2]][i + 1];
        result = min(result, map[query[2]][i]);
    }

    for (int i = query[2]; i > query[0];i--) {
        map[i][query[3]] = map[i - 1][query[3]];
        result = min(result, map[i][query[3]]);
    }

    for (int i = query[3]; i > query[1]; i--) {
        map[query[0]][i] = map[query[0]][i - 1];
        result = min(result, map[query[0]][i]);
    }

    map[query[0]][query[1] + 1] = tmp;
    result = min(result, tmp);
    return result;
}

vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
    vector<int> answer;
    reset(rows, columns);

    for (auto query : queries) {
        answer.push_back(get_num(query));
    }

    return answer;
}

댓글