16935. 배열 돌리기3

phoenixKim·2024년 11월 24일
0

백준 알고리즘

목록 보기
158/174

241124 4번연산까지 함.

  • 3번과 4번은 가로와 세로 가 뒤집어져야 한다.
    -> 이거를 어디서 보고 판단했냐면, 출력 3번과 4번인데...
    만약에 가로 세로가 동일하다면 절대로 찾을 수 없다....
    그렇다면 어떻게 판단해야 하냐면 직사각형을 그리고 , 회전을 하면
    어떻게 될까???? 를 생각해야 한다.


#include <vector>
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <algorithm>
#include <unordered_map>
using namespace std;



int main()
{
	

	//for(int i ~
	// for(int j 라고 하고 생각하자.

	// -1은 디폴트
	// [i][j] = [n - 1 - i][j]

	int n, m, r;
	cin >> n >> m >> r;

	vector<vector<int>> v(n, vector<int>(m));
	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < m; ++j)
		{
			cin >> v[i][j];
		}
	}
	vector<vector<int>> vTemp;
	for (int i = 0; i < r; ++i)
	{
		int cnt;
		cin >> cnt;
		switch (cnt)
		{
		case 1:
			vTemp.resize(n, vector<int>(m));

			// 상하 반전
			for (int i = 0; i < n / 2; ++i)
			{
				for (int j = 0; j < m; ++j)
				{
					vTemp[i][j] = v[n - 1 - i][j];
					vTemp[n - 1 - i][j] = v[i][j];
				}
			}

			

			break;
		case 2:
			// 좌우 반전. 
			// [i][j] = [i][m - 1 - j]
			vTemp.resize(n, vector<int>(m));

			for (int i = 0; i < n; ++i)
			{
				for (int j = 0; j < m; ++j)
				{
					vTemp[i][j] = v[i][m - 1 - j];
					vTemp[i][m - 1 - j] = v[i][j];
				}
			}

			
			break;
		case 3:
			// 출력3번을 보고 변경함.
			vTemp.resize(m, vector<int>(n));

			// 가로와 세로가 변경되는 구조이다.
			for (int i = 0; i < m; ++i)
			{
				for (int j = 0; j < n; ++j)
				{
					// 이 점화식은 그대로 가지고 가야 한다.
					vTemp[i][j] = v[n - 1 - j][i];

					//[0][0] = [n - 1][0]
					//[0][1] = [n - 1 - 1][0]
					//[0][2] = [n - 1 - 2][0]

					//[1][0] = [n - 1][1]
					//[1][1] = [n - 1 - 1][1]
					//[1][2] = [n - 1 - 2][1]
				}
			}
			
			

			break;
		case 4:
			vTemp.resize(m, vector<int>(n));

			// 가로와 세로가 변경되는 구조이다.
			for (int i = 0; i < m; ++i)
			{
				for (int j = 0; j < n; ++j)
				{
					// 이 점화식은 그대로 가지고 가야 한다.
					vTemp[i][j] = v[j][m - i - 1];

					// 행인 m으로 해야 한다. 
					// [0][0] = [0][m - 1]
					// [0][1] = [1][m - 1]
					// [0][2] = [2][m - 1]

					// [1][0] = [0][m - 1 - 1]
					// [1][1] = [1][m - 1 - 1]
					// [1][2] = [2][m - 1 - 1]

				}
			}

			

			break;
		case 5:

			break;
		case 6:

			break;
		}

		//v = vTemp;
	}
	
	int colSize = vTemp.size();
	int rowSize = vTemp[0].size();
	cout << endl;
	for (int i = 0; i < colSize; ++i)
	{
		for (int j = 0; j < rowSize; ++j)
		{
			cout << vTemp[i][j] << " ";
		}
		cout << endl;
	}

}


profile
🔥🔥🔥

0개의 댓글

관련 채용 정보