KoreanFoodie's Study
SW 역량테스트 - [백준] 이차원 배열과 연산 문제 풀이/해답/코드 (C++ / JAVA) 본문
Data Structures, Algorithm/SW 역량테스트
SW 역량테스트 - [백준] 이차원 배열과 연산 문제 풀이/해답/코드 (C++ / JAVA)
GoldGiver 2020. 10. 15. 23:50
SW 역량 테스트 준비를 위한 핵심 문제들을 다룹니다!
해답을 보기 전에 문제를 풀어보시거나, 설계를 하고 오시는 것을 추천드립니다.
코드에 대한 설명은 주석을 참고해 주세요 :)
문제 링크 : www.acmicpc.net/problem/17140
해답 코드 :
#include <iostream>
#include <vector>
using namespace std;
typedef struct rl_len {
int r_l;
int c_l;
}rl_len;
int a_r, a_c, a_k;
int map[100][100];
int cnt[101];
rl_len rl;
void swap2(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
// rotate row and column to use 'sort' fucntion
// use this only if c_len > r_len
void rotate2() {
for (int i = 0; i < 100; i++) {
for (int j = i; j < 100; j++) {
swap2(map[i][j], map[j][i]);
}
}
}
void update_rl() {
int isRow = true;
int max_r = 0;
int max_c = 0;
int temp;
for (int i = 0; i < 100; i++) {
temp = 0;
for (int j = 0; j < 100; j++) {
if (map[i][j] == 0) {
break;
}
temp++;
}
max_c = max_c < temp ? temp : max_c;
}
for (int j = 0; j < 100; j++) {
temp = 0;
for (int i = 0; i < 100; i++) {
if (map[i][j] == 0) {
break;
}
temp++;
}
max_r = max_r < temp ? temp : max_r;
}
rl.r_l = max_r;
rl.c_l = max_c;
}
// sort array in row manner
void sort() {
int total_len = max(rl.r_l, rl.c_l);
int row_len = rl.r_l;
int col_len = rl.c_l;
// do sort using map
int max_num = 0;
int max_dup = col_len;
vector<int> temp_elem;
// row_len >= col_len
if (row_len >= col_len) {
for (int row = 0; row < row_len; row++) {
// initialize cnt[101]
fill(cnt, cnt + 101, 0);
// fill cnt array
for (int j = 0; j <= col_len; j++) {
if (map[row][j] > 0) {
cnt[map[row][j]]++;
max_num = max_num < map[row][j] ? map[row][j] : max_num;
}
}
// using cnt array, make temp_elem
for (int dup = 1; dup <= col_len; dup++) {
for (int i = 1; i <= max_num; i++) {
if (cnt[i] == dup) {
temp_elem.push_back(i);
temp_elem.push_back(dup);
}
}
}
// copy temp_elem to map[row][]
fill_n(&map[row][0], 100, 0);
for (int i = 0; i < temp_elem.size() && i < 100; i++) {
map[row][i] = temp_elem[i];
}
temp_elem.clear();
}
}
else {
for (int col = 0; col < col_len; col++) {
// initialize cnt[101]
fill(cnt, cnt + 101, 0);
// fill cnt array
for (int i = 0; i <= row_len; i++) {
if (map[i][col] > 0) {
cnt[map[i][col]]++;
max_num = max_num < map[i][col] ? map[i][col] : max_num;
}
}
// using cnt array, make temp_elem
for (int dup = 1; dup <= row_len; dup++) {
for (int i = 1; i <= max_num; i++) {
if (cnt[i] == dup) {
temp_elem.push_back(i);
temp_elem.push_back(dup);
}
}
}
// copy temp_elem to map[row][]
//fill_n(&map[row][0], 100, 0);
for (int i = 0; i < 100; i++) {
map[i][col] = 0;
}
for (int i = 0; i < temp_elem.size() && i < 100; i++) {
map[i][col] = temp_elem[i];
}
temp_elem.clear();
}
}
update_rl();
}
int main() {
cin >> a_r >> a_c >> a_k;
int t = 0;
rl = { 3, 3 };
// initialize array
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cin >> map[i][j];
}
}
// simulate untill map[a_r][a_c] == a_k
for (t = 0; t <= 100; t++) {
// check ans
if (map[a_r-1][a_c-1] == a_k) {
cout << t << endl;
return 0;
}
// do sort
sort();
}
if (t > 100) {
cout << -1 << endl;
}
}
SW 역량테스트 준비 - [모의 SW 역량테스트] 풀이 / 코드 / 답안 (C++ / JAVA)
SW 역량테스트 준비 - C++ 코드, Java 코드
SW 역량테스트 준비 - 백준 알고리즘 문제
'Data Structures, Algorithm > SW 역량테스트' 카테고리의 다른 글
SW 역량테스트 - [백준] 게리맨더링 2 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
---|---|
SW 역량테스트 - [백준] 연구소 3 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 낚시왕 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 미세먼지 안녕! 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 아기 상어 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
Comments