프로그래머스 정사각형으로 만들기

KIMYEONGJUN·5일 전
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

내가 이 문제를 보고 생각해본 부분

main 메서드 안에서 Solution1 객체를 생성한다.
arr1, arr2, arr3 세 가지 테스트용 2차원 배열이 준비되어 있다.
각 배열을 solution.solution() 메서드에 넘겨 결과를 받고, printResult 메서드를 통해 결과를 출력한다.
printResult는 2차원 배열을 행과 열의 형태로 한 줄씩 출력하는 메서드이다.
출력 후 빈 줄을 하나 추가해서 결과 구분을 명확히 한다.
배열 arr을 입력받아 정사각형 배열로 바꾸는 메서드를 구현한다.
우선 원본 배열 arr의 행 수(rowCount)와 열 수(colCount)를 구한다.
Math.max를 사용해 행 또는 열 중 더 큰 쪽 값을 size로 정한다.
이후 크기가 size x size인 새로운 2차원 배열 answer를 만든다.
자바 int형 배열의 기본 초기값은 0이므로 0을 추가할 별도 작업이 필요 없다.
원래 배열 arr의 모든 원소를 2중 for문을 통해 answer에 그대로 복사한다.
복사된 부분 외에는 자동으로 0으로 초기화되어 행 또는 열이 부족한 부분은 0으로 채워진다.
완성된 정사각형 배열 answer를 반환한다.

코드로 구현

class Solution {
    public int[][] solution(int[][] arr) {
        int rowCount = arr.length;
        int colCount = arr[0].length;
        int size = Math.max(rowCount, colCount);
        int[][] answer = new int[size][size];
        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                answer[i][j] = arr[i][j];
            }
        }
        return answer;
    }
}

프로그래머스 코드

package programmers.programmers2;

// 프로그래머스 정사각형으로 만들기
public class Main115 {
    public static void main(String[] args) {
        Solution1 solution = new Solution1();

        int[][] arr1 = {
                {572, 22, 37},
                {287, 726, 384},
                {85, 137, 292},
                {487, 13, 876}
        };
        printResult(solution.solution(arr1));

        int[][] arr2 = {
                {57, 192, 534, 2},
                {9, 345, 192, 999}
        };
        printResult(solution.solution(arr2));

        int[][] arr3 = {
                {1, 2},
                {3, 4}
        };
        printResult(solution.solution(arr3));
    }

    private static void printResult(int[][] arr) {
        for (int[] row : arr) {
            for (int value : row) {
                System.out.print(value + " ");
            }
            System.out.println();
        }
        System.out.println();
    }
}

class Solution1 {
    public int[][] solution(int[][] arr) {
        int rowCount = arr.length;
        int colCount = arr[0].length;
        int size = Math.max(rowCount, colCount);
        int[][] answer = new int[size][size];
        for (int i = 0; i < rowCount; i++) {
            for (int j = 0; j < colCount; j++) {
                answer[i][j] = arr[i][j];
            }
        }
        return answer;
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글