[프로그래머스] Lv.0 정사각형으로 만들기

Dev.Dana·2024년 10월 19일
0

Algorithm

목록 보기
5/25
post-thumbnail

문제 설명

이차원 정수 배열 arr이 매개변수로 주어집니다. arr의 행의 수가 더 많다면 열의 수가 행의 수와 같아지도록 각 행의 끝에 0을 추가하고, 열의 수가 더 많다면 행의 수가 열의 수와 같아지도록 각 열의 끝에 0을 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

제한 사항
1 ≤ arr의 길이 ≤ 100
1 ≤ arr의 원소의 길이 ≤ 100
arr의 모든 원소의 길이는 같습니다.
1 ≤ arr의 원소의 원소 ≤ 1,000

이차원 배열을 정사각형으로 만드려면,
행과 열을 크기 비교한 다음 큰 값으로 n*n 행렬을 만들면 된다.

class Solution {
    public int[][] solution(int[][] arr) {
        int[][] answer = {};
        int rows = arr.length;
        int columns = arr[0].length;
        
        if (rows == columns) {
            return arr;
        } else if (rows > columns) {
            answer = new int[rows][rows]; 
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < columns; j++) {
                    answer[i][j] = arr[i][j]; 
                }
                for (int j = columns; j < rows; j++) {
                    answer[i][j] = 0;
                }
            }
        } else {
            answer = new int[columns][columns]; 
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < columns; j++) {
                    answer[i][j] = arr[i][j]; 
                }
            }
            for (int i = rows; i < columns; i++) {
                for (int j = 0; j < columns; j++) {
                    answer[i][j] = 0; 
                }
            }
        }
        return answer;
    }
}

코드 설명

1.	rows와 columns 변수를 사용해 행의 수와 열의 수를 구한다.
2.	행이 더 많을 경우:
	•	새로운 배열을 행의 크기만큼 만들고, 기존 배열의 데이터를 복사한 후, 부족한 열 부분을 0으로 채움
3.	열이 더 많을 경우:
	•	새로운 배열을 열의 크기만큼 만들고, 기존 배열의 데이터를 복사한 후, 부족한 행 부분을 0으로 채웁니다.
4.	행과 열의 크기가 같다면: 
	•	아무 것도 추가하지 않고 원래 배열을 반환
    

그런데.. 가만 있어보자..
배열은 자동 초기화가 된다. 자동초기화란 처음에 선언했을 때 값이 들어가지 않으면 int형은 0으로 문자열은 null로 자동으로 초기화 됨.

class Solution {
    public int[][] solution(int[][] arr) {
        int max = Math.max(arr.length, arr[0].length); 
        
        // 배열 생성 시, 자동으로 0으로 초기화됨
        int[][] answer = new int[max][max]; 

        // 원본 배열을 새로운 배열에 복사
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                answer[i][j] = arr[i][j];
            }
        }

        return answer; 
    }
}

그냥 냅다 max * max로 배열 만들어주고 그대로~ 복사해주면 끝나는 문제였다.
java의 기본을 잘 알고 있다면 훨씬 간결하게 끝날 문제였음

profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글