<문제 제시>
<문제설명>
정수 배열 num_list와 정수 n이 매개변수로 주어집니다.
num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.
num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로
num_list를 2 * 4 배열로 다음과 같이 변경합니다.
2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.
<예시 입출력>
<문제 해결 과정>
1차원배열을 2차원배열로 만드는 문제였다.
대신 n개씩 나누는 매개변수 n이 주어지는데, 이 n은 n * x 배열로 만들어진다는 의미이다. = 한 행당 n개
/* 테스트케이스
answer[0][?] = [1,2]
answer[1][?] = [3,4]
answer[2][?] = [5,6]
answer[3][?] = [7,8]
0,0일 경우 = 1
0,1일 경우 = 2를 넣어야함
*/
answer의 배열을 [num_list.length / n][n] 크기의 배열로 초기화해준다.
// num_list에서 가져오는 인덱스값은 끝까지 계속해서 증가해야하므로,
// k값으로 반영
int k = 0;
for(int i = 0; i < num_list.length / n; i++) {
for(int j = 0; j < n; j++) {
// num_list의 끝원소에 도달했을때 반복문 종료
if(k == num_list.length) break;
answer[i][j] = num_list[k];
k++;
}
}
이중 반복문을 통해 j문에서 n까지 반복하도록 만들면 2차원 배열을 정해진 조건처럼 만들 수 있다.
<전체코드>
import java.util.Arrays;
public class make_dimension {
public static int[][] solution(int[] num_list, int n) {
int[][] answer = new int[num_list.length / n][n];
// num_list에서 가져오는 인덱스값은 끝까지 계속해서 증가해야하므로,
// k값으로 반영
int k = 0;
for(int i = 0; i < num_list.length / n; i++) {
for(int j = 0; j < n; j++) {
// num_list의 끝원소에 도달했을때 반복문 종료
if(k == num_list.length) break;
answer[i][j] = num_list[k];
k++;
}
}
return answer;
}
public static void main(String[] args) {
int[] num_list = {1,2,3,4,5,6,7,8};
int n = 2;
System.out.println(Arrays.deepToString(solution(num_list, n)));
}
}
2차원배열을 print문으로 출력할때 1차원 배열에서 Arrays.toString()과는 달리
Arrays.deepToString()을 사용해야한다.
일반 Arrays.toString을 사용할 경우에는 배열 안에 있는 값들의 주소값을 다시 가리키기때문에
deepToString으로 처리해주어야하는 것이다.
2차원 배열의 구조를 예를 들어보면
배열 선언 시
int[][] answer = new int[2][3];
으로 지정하면
크게 2칸이있고, 그 안에 3개의 원소들이 있다는 의미이다.
다시말해
[[0, 0, 0], [0, 0, 0]]
크게 두 칸이 있고 그 안에 3개의 원소들이 있는 구조가 만들어진다.
만약 [[0,0,1], [0,0,0]] 에서 1이라는 원소에 접근하고 싶으면
answer[0][2] 로 접근하는 것이다.
2차원 배열을 다루는 문제를 2차원 배열을 만드는 문제로 알아볼 수 있었다.
문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120842
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스] '공 던지기' - Java (1) | 2023.04.29 |
---|---|
[프로그래머스] '구슬을 나누는 경우의 수' - Java (0) | 2023.04.29 |
[프로그래머스] '모스부호 (1)' - Java (0) | 2023.04.28 |
[프로그래머스] '순서쌍의 개수' - Java (0) | 2023.04.27 |
[프로그래머스] '진료 순서 정하기' - Java (0) | 2023.04.27 |