문제 설명
이차원 정수 배열 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의 기본을 잘 알고 있다면 훨씬 간결하게 끝날 문제였음