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

semi·2021년 8월 14일
0

coding test

목록 보기
1/57

https://programmers.co.kr/learn/courses/30/lessons/77485

#include <iostream>
#include <string>
#include <vector>

using namespace std;

vector<int> solution(int rows, int columns, vector<vector<int>> queries)
{
	int cnt = 1;
	vector<int> answer;
	vector<vector<int>> matrix(rows, vector<int>(columns)), matrix2(rows, vector<int>(columns));
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < columns; j++)
		{
			matrix[i][j] = cnt;
			cnt++;
		}
	}
	for (int q = 0; q < queries.size(); q++)
	{
		matrix2 = matrix;
		int start_i = queries[q][0] - 1, start_j = queries[q][1] - 1, end_i = queries[q][2] - 1, end_j = queries[q][3] - 1;
		int i, j, min = 987654321;
		i = start_i;
		j = start_j + 1;
		while (1)
		{
			if (min > matrix[i][j - 1])
				min = matrix[i][j - 1];
			matrix2[i][j] = matrix[i][j - 1];
			if (j == end_j)
				break;
			j++;
			
		}
		i++;
		while (1)
		{
			if (min > matrix[i - 1][j])
				min = matrix[i - 1][j];
			matrix2[i][j] = matrix[i - 1][j];
			if (i == end_i)
				break;
			i++;
		}
		j--;
		while (1)
		{
			if (min > matrix[i][j + 1])
				min = matrix[i][j + 1];
			matrix2[i][j] = matrix[i][j + 1];
			if (j == start_j)
				break;
			j--;
		}
		i--;
		while (1)
		{
			if (min > matrix[i + 1][j])
				min = matrix[i + 1][j];
			matrix2[i][j] = matrix[i + 1][j];
			if (i == start_i)
				break;
			i--;
		}
		answer.push_back(min);
		matrix = matrix2;
	}
	
	return answer;
}

int main(void)
{
	int rows1 = 6, columns1 = 6, rows2 = 3, columns2 = 3, rows3 = 100, columns3 = 97;
	vector<vector<int>> queries1 = {{2, 2, 5, 4}, {3, 3, 6, 6}, {5, 1, 6, 3}}, queries2 = {{1, 1, 2, 2}, {1, 2, 2, 3}, {2, 1, 3, 2}, {2, 2, 3, 3}}, queries3 = {{1, 1, 100, 97}};
	vector<int> v = solution(rows3, columns3, queries3);
	for (auto x : v)
	{
		cout << x << " ";
	}
	return 0;
}

0개의 댓글