Leetcode Java Reconstruct a 2-Row Binary Matrix
업데이트:
문제
코드
class Solution {
public List<List<Integer>> reconstructMatrix(int upper, int lower, int[] colsum) {
int sum = 0;
for (int num : colsum) {
sum += num;
}
if (sum != upper + lower) {
return new ArrayList<>();
} else {
int length = colsum.length;
int[][] result = new int[2][length];
for (int i = 0; i < length; i++) {
if (colsum[i] == 2 || (colsum[i] == 1 && lower < upper)) {
result[0][i] = 1;
}
if (colsum[i] == 2 || (colsum[i] == 1 && result[0][i] == 0)) {
result[1][i] = 1;
}
upper -= result[0][i];
lower -= result[1][i];
}
return upper == 0 && lower == 0 ? new ArrayList(Arrays.asList(result[0], result[1])) : new ArrayList<>();
}
}
}
결과
설명
- [0, 2] 범위의 값으로 구성된 colsum를 합이 upper인 List와 합이 lower인 List로 순차적으로 List로 감싸 반환하는 문제이다.
- 단, 구성이 불가능하면 빈 List를 주어진 문제의 결과로 반환한다.
-
colsum의 각 값의 합이 $upper + lower$와 동일하지 않는 조건을 만족할 수 없는 경우, 새 ArrayList를 주어진 문제의 결과로 반환한다.
- 문제 풀이에 필요한 변수를 정의한다.
- length는 colsum의 길이를 저장한 변수이다.
- result는 결과를 만들 변수로, $2 \times length$ 크기의 2차원 정수 배열로 초기화한다.
- 0부터 length까지 i를 증가시키며 아래를 반복한다.
- colsum[i]의 값이 2이거나 colsum[i]의 값이 1이면서 upper가 lower보다 클 경우, result[0][i]의 위치에 1을 넣어준다.
- colsum[i]의 값이 2이거나 colsum[i]의 값이 1이면서 result[0][i]의 값이 1인 upper에 넣지 않은 경우, result[1][i]의 위치에 1을 넣어준다.
- upper에 result[0][i]의 값을, lower에 result[1][i]의 값을 빼준다.
- upper와 lower의 값이 0인지 여부에 따라 아래를 수행한다.
- 0인 두 List로 나눌 수 있는 경우, result[0]과 result[1]을 ArrayList로 변환 후 새 ArrayList에 넣어 주어진 문제의 결과로 반환한다.
- 0이 아닌 두 List로 나눌 수 없는 경우, 새 ArrayList를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기