배열을 이용한 구현 문제였고 R 연산과 C연산 구현에는 성공하였지만 Pair의 1개 index에서 2개의 값을 추출해 하나의 다른 배열에 순서대로 넣는 점을 구현하지 못해 정답을 찾아보았다.
접근 방식은 맞았는데 마지막 넣는 것 만을 구현하지 못해 많이 아쉬웠다.
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int map[101][101];
int r, c, k;
int t = 0;
int check[101] = { 0 };
void find() {
int row = 3;
int column = 3;
int ti = 0;
while (true) {
if (map[r][c] == k) {
t = ti;
break;
}
if (ti > 100) {
t = -1;
break;
}
if (row >= column) {
int max_row = 0;
for (int i = 1; i <= row; i++) {
memset(check, 0, sizeof(check));
vector<pair<int, int>> v;
for (int j = 1; j <= row; j++) {
check[map[i][j]]++;
}
for (int j = 1; j <= 101; j++) {
if (check[j] != 0) {
//숫자 횟수, 숫자 넣기
v.push_back({ check[j],j });
}
}
int len = v.size();
max_row = max(len * 2, max_row);
sort(v.begin(), v.end());
for (int j = 1; j <= row; j++) {
map[i][j] = 0;
}
int idx = 1;
for (int j = 0; j < len; j++) {
map[i][idx++] = v[j].second;
map[i][idx++] = v[j].first;
}
}
row = max_row;
}
else {
int max_column = 0;
for (int i = 1; i <= column; i++) {
memset(check, 0, sizeof(check));
vector<pair<int, int>> v;
for (int j = 1; j <= column; j++) {
check[map[j][i]]++;
}
for (int j = 1; j <= 101; j++) {
if (check[j] != 0) {
//숫자 횟수, 숫자 넣기
v.push_back({ check[j],j });
}
}
int len = v.size();
max_column = max(len * 2, max_column);
sort(v.begin(), v.end());
for (int j = 1; j <= row; j++) {
map[i][j] = 0;
}
int idx = 1;
for (int j = 0; j < len; j++) {
map[idx++][i] = v[j].second;
map[idx++][i] = v[j].first;
}
}
column = max_column;
}
ti++;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> r >> c >> k;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
cin >> map[i][j];
}
}
//바로 정답을 찾을 경우
if (map[r][c] == k) {
cout << 0;
return 0;
}
find();
cout << t;
return 0;
}