문제
내가 작성한 정답
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
for(int i=0; i<n; i++){
answer[i][i] = 1;
}
return answer;
}
}
다른 사람들의 정답
import java.util.*;
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
Arrays.setAll(answer, i -> {
int[] array = answer[i]; // answer 배열의 i번째 행을 가져와 array에 할당
array[i] = 1; // array (즉, answer 배열의 i번째 행)의 i번째 열에 1을 할당. 이는 대각선 위치에 1을 채우는 것을 의미
return array; // 수정된 array (answer 배열의 i번째 행)를 반환. Arrays.setAll은 각 요소에 대해 연산을 수행하고 결과를 다시 배열에 설정.
});
return answer; // 대각선에 1이 채워진 2차원 배열 answer를 반환.
}
}
Arrays.setAll(array, generator);
array: 값을 설정할 배열입니다. 배열의 타입은 int[], double[], String[] 등 어떤 타입이든 가능합니다.
generator: IntFunction 인터페이스를 구현하는 함수형 인터페이스입니다. 이 함수는 배열의 인덱스를 인수로 받아 해당 인덱스에 대한 요소의 값을 반환합니다. IntFunction은 int를 입력으로 받아 T를 반환하는 함수형 인터페이스입니다. 여기서 T는 배열의 요소 타입입니다.
: 배열의 모든 요소를 지정된 생성 함수를 사용하여 설정하는 데 사용. 이 메서드는 배열의 인덱스를 기반으로 각 요소의 값을 계산하여 배열을 초기화하거나 업데이트하는 데 유용하다.
import java.util.stream.IntStream;
class Solution {
public int[][] solution(int n) {
return IntStream.range(0, n) // 2차원 배열의 행 인덱스를 생성하는 데 사용
.mapToObj(i -> // 각 행 인덱스 i에 대해 다음 연산을 수행하여 IntStream을 Stream<int[]>로 변환 -> 각 행을 생성
IntStream.range(0, n) // 2차원 배열의 열 인덱스를 생성하는 데 사용
.map(j -> j == i ? 1 : 0) // 각 열 인덱스 j에 대해, j가 i와 같으면 (즉, 대각선 위치이면) 1을 반환하고, 그렇지 않으면 0을 반환
.toArray()) // map 연산의 결과로 생성된 IntStream을 int[] (정수 배열, 즉 행)로 변환
.toArray(int[][]::new); // Stream<int[]>를 int[][] (2차원 정수 배열)로 변환합니다. int[][]::new는 배열 생성자 참조로, 스트림의 요소들을 사용하여 새로운 2차원 배열을 생성하는 데 사용
}
}
Share article