Java/Short 개발
[Java/Short] 배열을 반으로 나누어 재구성 방법 : for, Arrays.copyOfRange
adjh54
2023. 11. 3. 15:45
반응형
해당 글에서는 간단한 개발 방법으로 배열을 반으로 나누어 재구성하는 방법에 대해 알아봅니다.
1) for문을 이용한 방식
💡 for문을 이용한 방식
- 배열의 요소의 개수가 짝수인 경우도 있지만, ‘홀수’인 경우 인덱스의 값에 따라 각각 처리를 해야 합니다.
- 또한 요소의 개수가 홀수이면 ‘앞’에 요소를 더 둘 것인지 아니면 ‘뒤’에 요소를 더 둘 것인지에 대해 정하고 반을 나눠서 재구성합니다.
/**
* 배열을 반으로 나누기 : for 문을 이용한 방법
*
* @return
*/
@GetMapping("/1")
public ResponseEntity<ApiResponse<?>> question01() {
String answer = "";
// 1. 앞쪽 배열이 더 많은 요소를 갖게 하는 방법
int[] arr1 = {1, 2, 3, 4, 5, 6, 7};
int mid1 = (arr1.length + 1) / 2;
int[] prevArr1 = new int[mid1];
int[] postArr1 = new int[arr1.length - mid1];
for (int i = 0; i < arr1.length; i++) {
if (i < mid1) {
prevArr1[i] = arr1[i];
} else {
postArr1[i - mid1] = arr1[i];
}
}
// Prev Arr ::[1, 2, 3, 4] Post Arr ::[5, 6, 7]
System.out.println("Prev Arr ::" + Arrays.toString(prevArr1) + " Post Arr ::" + Arrays.toString(postArr1));
// // 2. 뒤쪽 배열이 더 많은 요소를 갖게 하는 방법
int[] arr2 = {1, 2, 3, 4, 5, 6, 7};
int mid2 = arr2.length / 2;
int[] prevArr2 = new int[mid2];
int[] postArr2 = new int[arr2.length - mid2];
for (int i = 0; i < arr2.length; i++) {
if (i < mid2) {
prevArr2[i] = arr2[i];
} else {
postArr2[i - mid2] = arr2[i];
}
}
// Prev Arr ::[1, 2, 3] Post Arr ::[4, 5, 6, 7]
System.out.println("Prev Arr ::" + Arrays.toString(prevArr2) + " Post Arr ::" + Arrays.toString(postArr2));
ApiResponse<Object> ar = ApiResponse
.builder()
.result(answer)
.resultCode(SUCCESS_CODE)
.resultMsg(SUCCESS_MSG).build();
return new ResponseEntity<>(ar, HttpStatus.OK);
}
2) Arrays.copyOfRange()를 이용한 방식
💡 Arrays.copyOfRange()를 이용한 방식
- for문과 동일하게 배열의 요소의 개수가 짝수인 경우도 있지만, ‘홀수’인 경우 인덱스의 값에 따라 각각 처리를 해야 합니다.
- 그래서 요소의 개수가 홀수이면 ‘앞’에 요소를 더 둘 것인지 아니면 ‘뒤’에 요소를 더 둘 것인지에 대해 정하고 반을 나눠서 재구성합니다.
/**
* 배열을 반으로 나누기
*
* @return
*/
@GetMapping("/2")
public ResponseEntity<ApiResponse<?>> question02() {
String answer = "";
// 1. 앞쪽 배열이 더 많은 요소를 갖게 하는 방법
int[] originalArray = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int mid = (originalArray.length + 1) / 2;
int[] prevArr1 = Arrays.copyOfRange(originalArray, 0, mid);
int[] postArr1 = Arrays.copyOfRange(originalArray, mid, originalArray.length);
System.out.println("Prev Arr ::" + Arrays.toString(prevArr1) + " Post Arr ::" + Arrays.toString(postArr1));
// 2. 뒤쪽 배열이 더 많은 요소를 갖게 하는 방법
int halfIndex = originalArray.length / 2;
int[] prevArr2 = Arrays.copyOfRange(originalArray, 0, halfIndex);
int[] postArr2 = Arrays.copyOfRange(originalArray, halfIndex, originalArray.length);
// Prev Arr ::[1, 2, 3, 4] Post Arr ::[5, 6, 7, 8, 9]
System.out.println("Prev Arr ::" + Arrays.toString(prevArr2) + " Post Arr ::" + Arrays.toString(postArr2));
ApiResponse<Object> ar = ApiResponse
.builder()
.result(answer)
.resultCode(SUCCESS_CODE)
.resultMsg(SUCCESS_MSG).build();
return new ResponseEntity<>(ar, HttpStatus.OK);
}
오늘도 감사합니다. 😀
반응형