Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)로 배열의 짝수·홀수 요소를 두 개의 리스트로 나누는 방법

배열에 담긴 숫자들을 짝수와 홀수로 구분해 서로 다른 두 개의 배열에 나누어 담는 것은 자바에서 자주 만나게 되는 기본적인 문제입니다. 이 글에서는 Scanner를 사용해 사용자로부터 배열을 입력받고, 나머지 연산자(%)를 활용해 짝수와 홀수를 분류하는 방법을 예제 코드와 함께 살펴봅니다.

예제 코드

import java.util.Scanner;

public class Demo {
   public static void main(String[] args) {
      int n, j = 0, k = 0;
      Scanner s = new Scanner(System.in);
      System.out.println("저장할 요소의 개수를 입력하세요 : ");
      n = s.nextInt();
      int my_arr[] = new int[n];
      int odd_vals[] = new int[n];
      int even_vals[] = new int[n];
      System.out.println("배열의 요소를 입력하세요(짝수와 홀수) : ");
      for (int i = 0; i < n; i++) {
         my_arr[i] = s.nextInt();
      }
      for (int i = 0; i < n; i++) {
         if (my_arr[i] % 2 != 0) {
            odd_vals[j] = my_arr[i];
            j++;
         } else {
            even_vals[k] = my_arr[i];
            k++;
         }
      }
      System.out.print("배열의 홀수 : ");
      if (j > 0) {
         for (int i = 0; i < j - 1; i++) {
            System.out.print(odd_vals[i] + ",");
         }
         System.out.print(odd_vals[j - 1]);
      } else {
         System.out.println("홀수가 없습니다.");
      }
      System.out.println();
      System.out.print("배열의 짝수 : ");
      if (k > 0) {
         for (int i = 0; i < k - 1; i++) {
            System.out.print(even_vals[i] + ",");
         }
         System.out.print(even_vals[k - 1]);
      } else {
         System.out.println("배열에 짝수가 없습니다.");
      }
   }
}

출력 결과

저장할 요소의 개수를 입력하세요 :
배열의 요소를 입력하세요(짝수와 홀수) :
배열의 홀수 : 1,9
배열의 짝수 : 2,4,6

콘솔 입력

5
1 2 4 6 9

코드 설명

'Demo' 클래스의 main 함수는 먼저 사용자에게 배열에 저장할 요소의 개수를 입력받습니다. 이어서 홀수 값을 저장할 배열과 짝수 값을 저장할 배열, 총 두 개의 새로운 배열을 선언합니다.

사용자로부터 배열 요소를 모두 입력받은 뒤에는 'for' 루프를 돌며 각 숫자를 2로 나눈 나머지가 0인지 검사합니다. 나머지가 0이 아니면 홀수이므로 odd_vals 배열에 저장하고, 나머지가 0이면 짝수이므로 even_vals 배열에 저장합니다. 마지막으로 각 배열의 값을 출력해 분류 결과를 보여줍니다. 이 방식은 배열의 모든 요소를 한 번씩만 검사하면 되므로 시간 복잡도가 O(n)으로 매우 효율적입니다.

원본 예제의 오류 바로잡기

원본 코드에서는 1을 '짝수도 홀수도 아닌 수'로 출력했지만, 수학적으로 1은 분명한 홀수입니다. 위 코드에서는 이러한 로직을 제거해 1도 일반적인 홀수로 분류되도록 수정했으며, 홀수나 짝수가 하나뿐인 경우에도 올바르게 출력되도록 조건문을 정비했습니다.

대안: ArrayList와 스트림(Stream) 활용하기

배열 크기를 미리 정하기 어렵거나 더 유연한 처리가 필요하다면 ArrayList와 스트림 API를 사용하는 방법도 좋습니다.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

int[] my_arr = {1, 2, 4, 6, 9};

List<Integer> evenList = Arrays.stream(my_arr)
        .filter(v -> v % 2 == 0)
        .boxed()
        .collect(Collectors.toList());

List<Integer> oddList = Arrays.stream(my_arr)
        .filter(v -> v % 2 != 0)
        .boxed()
        .collect(Collectors.toList());

System.out.println("짝수 : " + evenList); // [2, 4, 6]
System.out.println("홀수 : " + oddList); // [1, 9]

스트림 방식은 필터 조건만 바꾸면 되기 때문에 가독성이 좋고, 결과를 List 형태로 바로 받을 수 있어 실무에서도 널리 사용됩니다.