Java/Short 개발
[Java/Short] 1차원 배열, 2차원 배열 간 변환 방법(One Dimension Array to Two Dimension Array)
adjh54
2024. 3. 17. 17:02
반응형
해당 글에서는 1차원 배열을 2차원 배열로 바꾸거나 2차원 배열을 1차원 배열로 바꾸는 방법에 대해 알아봅니다.
1) 1차원 배열을 2차원 배열로 변환방법
1. for문을 이용한 방법
💡 for문을 이용한 방법
1. 1부터 9까지의 숫자가 저장되어 1차원 배열을 구성합니다. 그리고 rows(행)와 cols(열) 변수는 각각 2차원 배열의 행과 열의 수를 저장하고 있습니다.
2. rows(행)와 cols(열)의 크기를 가진 빈 2차원 배열을 선언합니다.
3. row(행)과 cols(열)을 순회하면서 1차원 배열의 값을 2차원 배열에 대입합니다.
4. 결과값을 출력합니다.
// 1
int[] oneDArray = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int rows = 3;
int cols = 3;
// 2
int[][] twoDArray = new int[rows][cols];
// 3
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
twoDArray[i][j] = oneDArray[(i * cols) + j];
}
}
// 4
for (int[] item : twoDArray) {
System.out.println("for 문을 활용한 결과 값 :: " + Arrays.toString(item));
}
2. IntStream을 이용한 방법
💡 IntStream을 이용한 방법
1. 1부터 9까지의 숫자가 저장되어 1차원 배열이 있습니다. 그리고 rows(행)와 cols(열) 변수는 각각 2차원 배열의 행과 열의 수를 저장하고 있습니다.
2. IntStream.range(0, oneDArray.length)를 사용하여 0부터 oneDArray의 길이를 cols로 나눈 값만큼의 정수 스트림을 생성합니다.
3. mapToObj 함수를 사용하면 각 인덱스에 대해 새로운 1차원 배열을 생성합니다. 이 배열에는 oneDArray의 연속적인 세 개의 요소가 저장됩니다.
4. 마지막으로, toArray 함수를 사용하여 이러한 1차원 배열들의 스트림을 2차원 배열로 변환합니다.
5. 결과값을 출력합니다.
// 1
int[] oneDArray = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int rows = 3;
int cols = 3;
// 2, 3, 4
int[][] twoDArray = IntStream.range(0, oneDArray.length / cols)
.mapToObj(i -> new int[]{oneDArray[i * cols], oneDArray[i * cols + 1], oneDArray[i * cols + 2]})
.toArray(int[][]::new);
// 5
for (int[] item : twoDArray) {
System.out.println("Stream을 활용한 결과 값 :: " + Arrays.toString(item));
}
2) 2차원 배열을 1차원 배열로 변환방법
1. for문을 이용한 방법
💡 for문을 이용한 방법
1. 2차원 배열 twoDArray를 선언하고 초기화합니다. 이 배열은 3x3 크기의 정수 배열입니다.
2. twoDArray의 행의 개수와 열의 개수를 각각 rows와 cols에 저장합니다.
3. rows * cols 크기의 1차원 배열 oneDArray를 선언하고 초기화합니다. 이 배열은 2차원 배열의 모든 요소를 저장하기 위한 것입니다.
4. 변수 pos를 선언하고 0으로 초기화합니다. 이 변수는 1차원 배열의 위치를 추적합니다.
5. 각 요소를 oneDArray의 pos 위치에 대입하고, pos 값을 1씩 증가시킵니다.
6. 결과값을 출력합니다.
// 1
int[][] twoDArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 2
int rows = twoDArray.length;
int cols = twoDArray[0].length;
// 3
int[] oneDArray = new int[rows * cols];
// 4
int pos = 0;
// 5
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
oneDArray[pos] = twoDArray[i][j];
pos++;
}
}
// 6
System.out.println("결과값 :: " + Arrays.toString(oneDArray));
2. stream을 이용한 방법
💡 stream을 이용한 방법
1. 2차원 배열 twoDArray를 선언하고 초기화합니다. 이 배열은 3x3 크기의 정수 배열입니다.
2. Arrays.stream(twoDArray)를 통해 스트림으로 변환합니다.
3. flatMapToInt(Arrays::stream)를 통해 2차원 배열을 1차원 배열로 평탄화하는 작업을 수행합니다.
4. .toArray()를 통해서 스트림을 다시 배열로 변환합니다.
5. 결과값을 출력합니다.
// 1. 2차원 배열 twoDArray를 선언하고 초기화합니다. 이 배열은 3x3 크기의 정수 배열입니다.
int[][] twoDArray = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
/*
* 2. Arrays.stream(twoDArray)를 통해 스트림으로 변환합니다.
* 3. flatMapToInt(Arrays::stream)를 통해 2차원 배열을 1차원 배열로 평탄화 하는 작업을 수행합니다.
* 4. .toArray()를 통해서 스트림을 다시 배열로 변환합니다.
*/
int[] oneDArray = Arrays.stream(twoDArray)
.flatMapToInt(Arrays::stream)
.toArray();
// 5. 결과값 출력
System.out.println("결과값 :: " + Arrays.toString(oneDArray));
오늘도 감사합니다. 😀
반응형