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);
}

 

 

 

 

오늘도 감사합니다. 😀

 

 

 

반응형