Algorithm/삼성 SW 역량 테스트 기출 문제
[Baekjoon][17140] 이차원 배열과 연산
어발
2022. 2. 18. 15:45
출처 - 백준사이트
나의 풀이
정렬을 하는 과정에서 tempmap이라는 배열에 각 인덱스가 숫자를 지칭하고 인덱스의 값이 숫자의 갯수를 의미하도록 구현하였다.
#include <iostream>
#include <cstring>
#define MAX_SIZE 100
using namespace std;
int map[MAX_SIZE][MAX_SIZE];
int r, c, k;
int max_r = 3, max_c = 3;
int result;
void printMap() {
cout << "\n";
for (int y = 0 ; y < max_r ; y++) {
for (int x = 0; x < max_c ; x++) {
cout.width(3);
cout << map[y][x] << " ";
}
cout << "\n";
}
}
void func_r() {
for (int y = 0 ; y < max_r ; y++) {
int tempmap[101] = {0, };
for (int x = 0 ; x < max_c ; x++)
tempmap[map[y][x]]++;
int check_num = 1;
int write_idx = 0;
memset(map[y], 0, sizeof(map[y]));
for (int cnt = 0 ; cnt < 100 ; cnt++) {
for (int x = 1 ; x < 101 ; x++) {
if (tempmap[x] == check_num) {
map[y][write_idx++] = x;
map[y][write_idx++] = check_num;
}
}
check_num++;
}
if (max_c < write_idx)
max_c = write_idx;
}
}
void func_c() {
for (int x = 0 ; x < max_c ; x++) {
int tempmap[101] = {0, };
for (int y = 0 ; y < max_r ; y++)
tempmap[map[y][x]]++;
int check_num = 1;
int write_idx = 0;
for (int y = 0 ; y < max_r ; y++)
map[y][x] = 0;
for (int cnt = 0 ; cnt < 100 ; cnt++) {
for (int y = 1 ; y < 101 ; y++) {
if (tempmap[y] == check_num) {
map[write_idx++][x] = y;
map[write_idx++][x] = check_num;
}
}
check_num++;
}
if (max_r < write_idx)
max_r = write_idx;
}
}
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> r >> c >> k;
for (int y = 0 ; y < 3 ; y++) {
for (int x = 0 ; x < 3 ; x++)
cin >> map[y][x];
}
while (1) {
if (map[r-1][c-1] == k)
break;
if (result > 100) {
result = -1;
break;
}
if (max_r >= max_c)
func_r();
else
func_c();
result++;
printMap();
}
cout << result;
return 0;
}
728x90