Algorithms/프로그래머스

[프로그래머스] '2차원으로 만들기' - Java

LEFT 2023. 4. 28. 15:50

<문제 제시>

<문제설명>
정수 배열 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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr