17140번 이차원 배열과 연산

동도리동·2021년 9월 24일
0

코딩테스트

목록 보기
43/76
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
int r, c, k;
int a[101][101];
int main() {
	//freopen("in1.txt", "rt", stdin);
	cin >> r >> c >> k;
	for (int i = 1; i <= 3; i++) {
		for (int j = 1; j <= 3; j++) {
			cin >> a[i][j];
		}
	}
	int ans = 0;
	int n, m;
	n = m = 3;
	
	while (1) {
		if (a[r][c] == k) {
			cout << ans << '\n';
			return 0;
		}
		if (ans > 100) break;
		
		if (n >= m) { //R연산
			int mm = m;
			for (int i = 1; i <= n; i++) {
				map<int, int> d;
				for (int j = 1; j <= m; j++) {
					if (a[i][j] == 0) continue;
					d[a[i][j]]++;
				}
				vector<pair<int, int>> v;
				for (auto iter:d) {
					v.push_back(make_pair(iter.second, iter.first));
				}
				sort(v.begin(), v.end());
				int l = v.size();
				for (int j = 1; j <= l; j++) {
					a[i][j * 2 - 1] = v[j - 1].second;
					a[i][j * 2] = v[j - 1].first;
				}
				for (int j = l*2+1; j <= 100; j++) {
					a[i][j] = 0;
				}
				if (v.size() * 2 > mm) mm = v.size() * 2;
			}
			m = mm;
		}

		else {//C연산
			int nn = n;
			for (int j = 1; j <= m; j++) {
				map<int, int> d;
				for (int i = 1; i <= n; i++) {
					if (a[i][j] == 0) continue;
					d[a[i][j]]++;
				}
				vector<pair<int, int>> v;
				for (auto iter : d) {
					v.push_back(make_pair(iter.second, iter.first));
				}
				sort(v.begin(), v.end());
				int l = v.size();
				for (int i = 1; i <= l; i++) {
					a[i * 2 - 1][j] = v[i - 1].second;
					a[i * 2][j] = v[i - 1].first;
				}
				for (int i = l*2+1; i <= 100; i++) {
					a[i][j] = 0;
				}
				if (v.size() * 2 > nn) nn = v.size() * 2;
			}
			n = nn;
		}

		ans++;
	}
	cout << -1 << '\n';


	return 0;
}
profile
긍정코딩세상

0개의 댓글

관련 채용 정보