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

2021. 11. 17. 15:59·Algorithm/Programmers
#include <string>
#include <vector>

using namespace std;

vector<int> answer;
int maxNum;

void turn_border(const vector<int>& queries, vector<vector<int>> &table);

vector<int> solution(int rows, int columns, vector<vector<int>> queries) 
{
    vector<vector<int>> table; //[y][x]

    maxNum = rows * columns + 1;
    //make_table
    for (int y = 0; y < rows; y++)
    {
        vector<int> columns_table_temp;
        for (int x = 0; x < columns; x++)
            columns_table_temp.push_back(y * columns + x + 1);

        table.push_back(columns_table_temp);
    }

    for (int i = 0; i < queries.size(); i++)
        turn_border(queries[i], table);

    return answer;
}

void turn_border(const vector<int>& queries, vector<vector<int>>& table)
{
    int border_x[2] = { queries[1] - 1, queries[3] - 1 };
    int border_y[2] = { queries[0] - 1, queries[2] - 1 };

    int minNum = maxNum;
    int lastNum = table[border_y[0]][border_x[0]];
    minNum = min(minNum, lastNum);

    //search_border
    {
        for (int y = border_y[0]; y < border_y[1]; y++)
        {
            table[y][border_x[0]] = table[y + 1][border_x[0]];
            minNum = min(minNum, table[y][border_x[0]]);
        }

        for (int x = border_x[0]; x < border_x[1]; x++)
        {
            table[border_y[1]][x] = table[border_y[1]][x + 1];
            minNum = min(minNum, table[border_y[1]][x]);
        }

        for (int y = border_y[1]; y > border_y[0]; y--)
        {
            table[y][border_x[1]] = table[y - 1][border_x[1]];
            minNum = min(minNum, table[y][border_x[1]]);
        }

        for (int x = border_x[1]; x > border_x[0] + 1; x--)
        {
            table[border_y[0]][x] = table[border_y[0]][x - 1];
            minNum = min(minNum, table[border_y[0]][x]);
        }

        table[border_y[0]][border_x[0] + 1] = lastNum;
    }

    answer.push_back(minNum);
}

풀이

  1. rows * columns 행렬을 만든다.
  2. 행렬의 세로 길이(행 개수) rows, 가로 길이(열 개수) columns임을 조심한다.
  3. 테두리를 탐색한다.
  4. 나중에 넣을 값을 저장해놓고 한 칸씩 빈공간으로 값을 밀어준다. 회전이 시계방향이 되도록.
  5. 순회를 하면서 가장 작은 값을 저장해준다.

 

 

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

 

저작자표시

'Algorithm > Programmers' 카테고리의 다른 글

[C++] 프로그래머스 정수삼각형  (0) 2021.12.31
[C++] 프로그래머스 게임 맵 최단거리  (0) 2021.12.30
[C++] 프로그래머스 N-Queen 재귀  (0) 2021.11.15
[C++] 프로그래머스 [1차]추석트래픽  (0) 2021.11.06
[C++] 프로그래머스 N으로표현 DP  (0) 2021.11.04
'Algorithm/Programmers' 카테고리의 다른 글
  • [C++] 프로그래머스 정수삼각형
  • [C++] 프로그래머스 게임 맵 최단거리
  • [C++] 프로그래머스 N-Queen 재귀
  • [C++] 프로그래머스 [1차]추석트래픽
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Java
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    c++ 기초 플러스
    JWT
    티스토리챌린지
    위클리 챌린지
    dfs
    dp
    Java
    프로그래머스
    오블완
    JPA
    spring
    백준
    알고리즘
    SpringSecurity
  • hELLO· Designed By정상우.v4.10.0
chanheess
[C++] 프로그래머스 행렬 테두리 회전하기
상단으로

티스토리툴바