[Leetcode] #1252 2d 매트릭스의 홀수 숫자 갯수 찾기

문제 요약

자세한 내용은 leetcode에서 확인

https://leetcode.com/problems/cells-with-odd-values-in-a-matrix/


2d 매트릭스의 열과 행 값을 증가하고 홀수의 총 갯수를 반환하라.


input:

int n = row (열) 갯수

int m = column (행) 갯수

int[][] indices = 증가시킬 [열, 행] 쌍들


예제

n = 2, m = 3 매트릭스는 다음과 같이 표현 된다.

| 0 0 0 |
| 0 0 0 |

indices = [ [0,1] ] 을 적용하면 row 0을 전체 1 씩 증가, column 1을 전체 1 씩 증가하여 다음과 같다.

| 1 2 1 |
| 0 1 0 |


홀수가 총 3개가 있으니 3을 반환한다. 

 

풀이

rows[]와 columns[]을 만들어 따로 관리한다. 이것 대신에 2d 배열을 만들면 되지라고 생각 할 수도 있지만 그럼 n x m 만큼 배열을 돌아야 하는 반면 따로 관리하면 indices 길이만큼만 돌면 된다.

indices 배열을 돌면서 rows와 columns 배열들에 해당되는 row/column 인덱스의 값을 증가시킨다.

for loop을 n x m 만큼 돌면서 rows[i] + columns[j]가 홀수면 카운팅 한다.



public int oddCells(int n, int m, int[][] indices) {
// row 관리하는 배열 정의. n의 길이를 가진다.
int[] r = new int[n];

// column 관리하는 배열 정의. m의 길이를 가진다.
int[] c = new int[m];
// indices 에서 지정한 특정 row들과 column들의 값을 증가시킨다.
// indices의 pair는 [r, c]이기 때문에 무조건 인덱스 0의 값은 row, 인덱스 1의 값은 column이다.
for (int i=0; i<indices.length; i++) {
r[indices[i][0]]++;
c[indices[i][1]]++;
}
int cnt = 0;
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
// cell의 값을 찾아내어 홀수인지 확인한다.
if ((r[i] + c[j]) % 2 == 1) {
cnt++;
}
}
}

// 홀수의 총 갯수를 반환한다.
return cnt;
}