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;
}'문제 풀이 > 프로그래머스 (Programmers)' 카테고리의 다른 글
| [C++] 프로그래머스 : 튜플 (0) | 2021.11.08 | 
|---|---|
| [C++] 프로그래머스 : [1차] 뉴스 클러스터링 (0) | 2021.10.24 | 
| [C++] 프로그래머스 : 위클리 챌린지 (9주차) (0) | 2021.10.10 | 
| [C++] 프로그래머스 : 짝지어 제거하기 (0) | 2021.10.09 | 
| [C++] 프로그래머스 : 타겟 넘버 (0) | 2021.10.08 | 
댓글