문제
내가 작성한 정답
2중 for
class Solution {
public int solution(int[][] board, int k) {
int answer = 0;
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
// 삼항연산자
// answer += (i+j<=k)?board[i][j]:0;
if(i+j<=k) answer += board[i][j];
}
}
return answer;
}
}
stream
import java.util.stream.*;
class Solution {
public int solution(int[][] board, int k) {
return IntStream.range(0,board.length)
.flatMap(i->IntStream.range(0,board[0].length)
.filter(j->i+j<=k)
.map(j->board[i][j]))
.sum();
}
}
- 2차원 배열을 스트림으로 던지면 스트림에서 각 행이 1차원 배열을 가지는 요소들로 변환된다.
- flatMap 변환 (Mapping): 스트림의 각 요소를 다른 스트림으로 변환 평탄화 (Flattening): 변환된 모든 스트림을 하나의 스트림으로 합친다.
다른 사람들의 정답
import java.util.stream.IntStream;
class Solution {
public static int solution(int[][] board, int k) {
return IntStream.range(0, board.length)
.filter(i -> i <= k)
// 각 행(i)에 대해 열 인덱스(j) 스트림 생성 및 계산
.map(i -> {
return IntStream.range(0, board[i].length)
.filter(j -> j <= k - i)
// board[i][j] 값으로 매핑: 선택된 열 인덱스 j에 해당하는 board[i][j] 값을 스트림 요소로 변환
.map(j -> board[i][j])
// 해당 행(i)의 합 계산: 필터링 및 매핑된 요소들의 합을 계산
.sum();
})
//모든 행에 대한 합 계산: 각 행의 합들을 모두 더하여 최종 결과 반환
.sum();
}
}
Share article