출처 - 백준사이트
나의 풀이
정렬을 하는 과정에서 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
'Algorithm > 삼성 SW 역량 테스트 기출 문제' 카테고리의 다른 글
| [Baekjoon][17837] 새로운 게임 2 (0) | 2022.02.23 |
|---|---|
| [Baekjoon][17142] 연구소 3 (0) | 2022.02.21 |
| [Baekjoon][14500] 테트로미노 (1) | 2022.02.16 |
| [Baekjoon][14499] 주사위 굴리기 (0) | 2022.02.14 |
| [Baekjoon][13458] 시험 감독 (0) | 2022.01.17 |
댓글