Q : M * N 행렬의 한 원소가 0일 경우, 해당 원소가 속한 행과 열의 모든 원소를 0으로 설정하는 알고리즘을 작성하라.
#include <iostream>
int** OMatrix(int** input, int m, int n) {
bool* horizen0;
bool* vertical0;
horizen0 = new bool[m];
vertical0 = new bool[n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (input[i][j] == 0) {
horizen0[i] = 1;
vertical0[j] = 1;
}
}
}
for (int i = 0; i < m; i++) {
if (horizen0[i] == 1) {
for (int j = 0; j < n; j++) {
input[i][j] = 0;
}
}
}
for (int i = 0; i < n; i++) {
if (vertical0[i] == 1) {
for (int j = 0; j < m; j++) {
input[j][i] = 0;
}
}
}
return input;
}
int main() {
int* input[4];
input[0] = new int[5] {1, 2, 3, 4, 5};
input[1] = new int[5] {1, 0, 3, 0, 5};
input[2] = new int[5] {1, 2, 3, 4, 5};
input[3] = new int[5] {1, 0, 3, 4, 5};
OMatrix(input, 4, 5);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
printf("%d", input[i][j]);
}
printf("\n");
}
}
1. 행렬을 한번 순회하며 0이 하나라도있는 행과 열을 확인.
2. 0이 하나라도 있는 행이나 열을 모두 0으로 바꿈
'문제 풀기 > 코딩인터뷰' 카테고리의 다른 글
[코딩인터뷰 완전정복] 2.1 중복 없애기 (0) | 2019.05.10 |
---|---|
[코딩인터뷰 완전정복] 1.9 문자열 회전 (0) | 2019.05.10 |
[코딩인터뷰 완전정복] 1.7 행렬 회전 (0) | 2019.05.09 |
[코딩인터뷰 완전정복] 1.6 문자열 압축 (0) | 2019.05.09 |
[코딩인터뷰 완전정복] 1.5 하나 빼기 (0) | 2019.05.09 |