코딩테스트/Programmers

정사각형으로 만들기

grove1212 2025. 1. 23. 14:47

코드 중 //이 부분 에서 IndexOutOfBound 오류가 발생했다.
아래와 같이 rowSize, colSize로 대입해서 코드를 작성해야 실행 오류가 발생하지 않는다. 왜그런걸까?

class Solution {
    public int[][] solution(int[][] arr) {
        int[][] answer = {};
        int rowSize = arr.length, colSize = arr[0].length;
        if(rowSize == colSize);
        else if(rowSize > colSize){
            //가로로 늘린다.
            //arr.length = 세로길이
            //arr[0].length = 가로길이
            //세로 길이가 더 길고, 가로길이를 세로 길이에 맞춰서 늘려야
            for(int i = 0; i < rowSize; i++){
                int []tmp = new int[rowSize];
                for(int j = 0; j < rowSize; j++){
                    if(j < colSize){ //이 부분
                        tmp[j] = arr[i][j];
                    } else {
                        tmp[j] = 0;
                    }
                }
                arr[i] = tmp;
            }
        } else {
            //세로로 늘린다.
            int [][]tmp = new int[arr[0].length][arr[0].length];
            for(int i = 0; i < arr[0].length; i++){
                if(i < arr.length){
                    tmp[i] = arr[i].clone();

                } else {
                    tmp[i] = new int[tmp.length];
                }
            }
            arr = tmp;
        }

        return arr;
    }
}

 

다른 분 풀이

class Solution {
    public int[][] solution(int[][] arr) {
        int max = Math.max(arr.length, arr[0].length);
        int[][] array = new int[max][max];

        for (int i = 0; i < arr.length; i++) {
            System.arraycopy(arr[i], 0, array[i], 0, arr[0].length);
        }
        return array;
    }
}