늦은 프로그래밍 이야기
자바 알고리즘 (2차원 배열) 본문
2차원 배열 만들기
논점
- 1차원 배열에 있는 숫자 데이터를 2차원 배열로 옮긴다.
2차원 배열 만드는 방법
배열의 선언과 초기화를 동시에 하는 법
- 기본 값으로 0이 들어가게 된다.
int[][] arr = new int[i][j];
- 기본 값을 정해준다.
int[][] arr = {{1, 2, 3}, {4, 5, 6}};
리스트로 만드는 방법
- 리스트 안에 리스트 추가
List<List<Integer>> arr = new ArrayList<>();
for (int i = 0; i < 3; i++) {
arr.add(new ArrayList<>());
}
// []
// []
// []
- 리스트 요소의 크키 및 초기 값 설정 (Collection.nCopies(size, value))
List<List<Integer>> arr = new ArrayList<>();
for (int i = 0; i < 3; i++) {
arr.add(Collection.nCopies(3, 0));
}
// [0, 0, 0]
// [0, 0, 0]
// [0, 0, 0]
- 초기 값이 각각 다른 리스트 (Arrays.asList())
List<List<Integer>> arr = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8, 9)
);
// [1, 2, 3]
// [4, 5, 6]
// [7, 8, 9]
문제
정수 배열 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차 인덱스를 나열할 반복문이 필요.
- 기존 배열의 인덱스를 나열할 방법이 필요했다. count 변수를 사용하는 방법이 있지만 막상 떠오르지 않았고 문제를 다 풀고 나서야 다른 사람들의 풀이 방법을 보고 알게 되었다. 그래서 가지고 있는 i와 j로 조합하여 사용하다가 더이상 안되어서 n을 사용하여 조합해보았다.
- 2차원 배열은 배열로 만드는 방법 밖에 몰라서 배열로 풀었지만, 리스트로 만드는 방법도 시도해보았다.
배열로 만드는 방법
class Solution {
public int[][] solution(int[] num_list, int n) {
int[][] answer = new int[num_list.length/n][n]; // 2차원 배열을 주어진 배열을 n만큼 쪼갠 수와 n의 길이로 선언
for (int i = 0; i < num_list.length/n; i++) { // 1차 인덱스를 나열
for (int j = 0; j < n; j++) { // 2차 인덱스를 나열
answer[i][j] = num_list[i * n + j]; // i가 0인 경우에는 0, 1, 2 i가 1인 경우에는 n, n+1, n+2 ...
}
}
return answer;
}
}
리스트로 만드는 방법
import java.util.*;
class Solution {
public List solution(int[] num_list, int n) {
List<List<Integer>> answer = new ArrayList<>(); // answer 리스트 안에 리스트 생성
int count = 0;
for (int i = 0; i < num_list.length/n; i++) { // answer 리스트의 인덱스
List<Integer> arr = new ArrayList<>(); // arr 리스트 생성
for (int j = 0; j < n; j++) { // arr 리스트의 인덱스
arr.add(num_list[count]); // arr 리스트에 추가
count += 1;
}
answer.add(arr); // answer 리스트에 arr 리스트 추가
}
return answer;
}
}
'내일배움캠프 > 자료구조 알고리즘' 카테고리의 다른 글
| [Java] ArrayList 정렬하기 (0) | 2022.12.23 |
|---|---|
| [Java] int형 숫자 각각의 자릿수 구하기 (0) | 2022.12.20 |
| 알고리즘 타임어택 오답노트 (0) | 2022.11.16 |
| 그래프, DFS & BFS, Dynamic Programming (1) | 2022.11.14 |
| 해쉬 (0) | 2022.11.14 |
Comments