Muscardinus

이차원 배열과 연산 본문

알고리즘 문제/[삼성 SW 역량 테스트 기출 문제]

이차원 배열과 연산

Muscardinus 2020. 9. 3. 02:01
728x90

www.acmicpc.net/problem/17140

 

17140번: 이차원 배열과 연산

첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다.

www.acmicpc.net

#include <iostream>

using namespace std;

int map[101][101];
int r, c, k;

int pre_row_size, cur_row_size;
int pre_col_size, cur_col_size;
int answer = 0;

void update_row(int sy) {
	int bucket[101] = { 0, };
	for (int x = 1; x <= pre_col_size; x++) {
		bucket[map[sy][x]]++;
	}
	int size = 0;
	for (int i = 1; i <= 100 && size < 100; i++) {
		for (int j = 1; j <= 100 && size < 100; j++) {
			if (bucket[j] == i) {
				map[sy][++size] = j;
				map[sy][++size] = i;
			}
		}
	}
	for (int i = size + 1; i <= 100; i++) {
		map[sy][i] = 0;
	}
	if (cur_col_size < size) {
		cur_col_size = size;
	}
}
void update_col(int sx) {
	int bucket[101] = { 0, };
	for (int y = 1; y <= pre_row_size; y++) {
		bucket[map[y][sx]]++;
	}
	int size = 0;
	for (int i = 1; i <= 100 && size < 100; i++) {
		for (int j = 1; j <= 100 && size < 100; j++) {
			if (bucket[j] == i) {
				map[++size][sx] = j;
				map[++size][sx] = i;
			}
		}
	}
	for (int i = size + 1; i <= 100; i++) {
		map[i][sx] = 0;
	}
	if (cur_row_size < size) {
		cur_row_size = size;
	}
}

void solve() {
	while (map[r][c] != k) {
		if (cur_row_size >= cur_col_size) {
			pre_col_size = cur_col_size;
			cur_col_size = 0;
			//row update
			for (int y = 1; y <= cur_row_size; y++) {
				update_row(y);
			}
		}
		else {
			pre_row_size = cur_row_size;
			cur_row_size = 0;
			//col update
			for (int x = 1; x <= cur_col_size; x++) {
				update_col(x);
			}
		}
		answer++;
		if (answer > 100) return;
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin >> r >> c >> k;
	pre_row_size = 3; pre_col_size = 3;
	cur_row_size = 3; cur_col_size = 3;
	for (int y = 1; y <= 3; y++) {
		for (int x = 1; x <= 3; x++) {
			cin >> map[y][x];
		}
	}
	answer = 0;
	solve();
	if (answer > 100) answer = -1;
	cout << answer << "\n";
	return 0;
}
728x90

'알고리즘 문제 > [삼성 SW 역량 테스트 기출 문제]' 카테고리의 다른 글

게리멘더링 2  (0) 2020.09.04
연구소 3  (0) 2020.09.04
미세먼지 안녕!  (0) 2020.09.02
아기상어  (0) 2020.09.01
나무 제테크  (0) 2020.09.01
Comments