[알고리즘문제풀기] 특별한 이차원 배열 1

silver's avatar
Apr 07, 2025
[알고리즘문제풀기] 특별한 이차원 배열 1

문제

내가 작성한 정답

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

silver