프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 정사각형으로 만들기(Java)

Sigfriede 2023. 5. 14. 01:10

  문제 설명

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

 

  제한사항

  • 1 <= arr의 길이 <= 100
  • 1 <= arr의 원소의 길이 <= 100
  • arr의 모든 원소의 길이는 같습니다.
  • 1 <= arr의 원소의 원소 <= 1,000

 

  입출력 예

arr result
[[572, 22, 37], [287, 726, 384], [85, 137, 292], [487, 13, 876]] [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]]
[[57, 192, 534, 2], [9, 345, 192, 999]] [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]]
[[1, 2], [3, 4]] [[1, 2], [3, 4]]
import java.util.Arrays;
class Solution {
    public int[][] solution(int[][] arr) {
        int max = Math.max(arr.length, arr[0].length);
        int[][] answer = new int[max][max];
        if (arr.length == arr[0].length) {
            for (int i = 0; i < arr.length; i++)
            answer[i] = Arrays.copyOf(arr[i], arr[i].length);
        } else {
            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 변수를 생성합니다. 이는 행과 열 중 어느 것이 더 긴지 판단한 결과가 담길 것입니다. Math 클래스의 max 메소드를 이용하여 행의 길이(arr.length)와 열의 길이(arr[0].length) 중 더 큰 값을 반환합니다.

  answer 배열을 생성합니다. 정사각형이므로 행과 열의 길이는 동일합니다. 더 큰 값에 맞추어야 하므로 앞서 구한 max 변수를 이용합니다.

  if문에서 행과 열의 길이를 비교합니다. 만약 같다면 변경할 필요가 없으므로 배열을 복사할 것입니다. for문이 arr의 길이만큼 순회합니다. Arrays 클래스의 copyOf 메소드를 이용하여 복사합니다. answer의 i번째 원소는 arr의 i번째 원소를 arr의 i번째 길이만큼 복사합니다. 일차원 배열을 복사하는 데에는 메소드만 이용해도 되지만, 이 코드에서는 이차원 배열을 복사해야 하므로 이 방법을 이용했습니다.

  앞선 조건에 해당하지 않는다면 행과 열의 크기를 조정할 필요가 있습니다. 바깥 for문이 arr의 길이만큼 순회합니다. 안쪽 for문이 arr의 i번째 배열의 길이만큼 순회합니다. answer[i][j]번째 원소에 arr[i][j]번째 원소를 할당합니다. 할당받는 원소의 개수보다 배열의 크기가 더 크기 때문에 채워지지 않은 빈 자리에는 자동으로 0이 채워질 것입니다.