[알고리즘문제풀기] 정사각형으로 만들기

silver's avatar
Oct 12, 2025
[알고리즘문제풀기] 정사각형으로 만들기

문제

내가 작성한

오답

:Arrays.copyOf(arr, m)에서 arr은 2차원 배열이고, 깊은 복사가 아닌 얕은 복사가 일어나서
  • 기존 arr에 있던 2개의 행은 그대로 복사되고 (참조만 복사됨),
  • 나머지 확장된 2개의 인덱스는 초기값null로 남아 있게 된다
notion image
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; } }
notion image
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

silver