문제
내가 작성한
오답
:
Arrays.copyOf(arr, m)에서 arr은 2차원 배열이고, 깊은 복사가 아닌 얕은 복사가 일어나서- 기존
arr에 있던 2개의 행은 그대로 복사되고 (참조만 복사됨),
- 나머지 확장된 2개의 인덱스는 초기값
null로 남아 있게 된다

import java.util.*;
class Solution {
public int[][] solution(int[][] arr) {
int l1 = arr.length, l2 = arr[0].length;
int m = Math.max(l1,l2);
int[][] answer = new int[m][m];
if(l1>l2) {
for (int i = 0; i < l1; i++) {
answer[i] = Arrays.copyOf(arr[i], l1);
}
}else {
answer = Arrays.copyOf(arr,m);
}
return answer;
}
}
import java.util.*;
class Solution {
public int[][] solution(int[][] arr) {
int l1 = arr.length, l2 = arr[0].length;
int m = Math.max(l1,l2);
int[][] answer = new int[m][m];
if(l1>l2) {
for (int i = 0; i < l1; i++) {
answer[i] = Arrays.copyOf(arr[i], l1);
}
}else {
answer = Arrays.copyOf(arr,m);
for(int i=l1; i<m; i++){
// 여기에서 null로 이미 할당된 걸 불러서 0을 넣으려고 해서 NullPointerException이 터졌다
Arrays.fill(answer[i],0);
}
}
return answer;
}
}정답
import java.util.*;
class Solution {
public int[][] solution(int[][] arr) {
int l1 = arr.length, l2 = arr[0].length;
int m = Math.max(l1,l2);
int[][] answer = new int[m][m];
if(l1>l2) {
for (int i = 0; i < l1; i++) {
answer[i] = Arrays.copyOf(arr[i], l1);
}
}else {
answer = Arrays.copyOf(arr,m);
for(int i=l1; i<m; i++
answer[i] = new int[m];
}
}
return answer;
}
}다른 사람들의 정답
class Solution {
public int[][] solution(int[][] arr) {
int max = Math.max(arr.length, arr[0].length);
int[][] array = new int[max][max];
// arr 배열의 각 행을 새 배열의 행에 복사
for (int i = 0; i < arr.length; i++) {
// arr[i]의 0부터 arr[0].length까지를 array[i] 0부터 같은 길이만큼 복사
System.arraycopy(arr[i], 0, array[i], 0, arr[0].length);
}
return array; // 확장된 배열 반환
}public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)src: 원본 배열 (복사할 배열)
srcPos: 원본 배열 내에서 복사를 시작할 인덱스
dest: 대상 배열 (복사 대상 배열)
destPos: 대상 배열 내에서 붙여넣기를 시작할 인덱스
length: 복사할 원소의 개수
Share article