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

Java로 리스트를 두 부분(전반부/후반부)으로 나누는 방법

이 글에서는 Java를 사용하여 리스트(List)를 두 부분으로 나누는 방법을 알아봅니다. 리스트는 요소들을 순서대로 저장하고 순차적으로 접근할 수 있는 정렬된 컬렉션입니다. 인덱스 기반의 메서드를 통해 요소를 삽입, 수정, 삭제 및 검색할 수 있으며, 중복된 요소도 허용합니다.

문제 이해하기

리스트를 절반 기준으로 나누면 앞쪽 절반과 뒤쪽 절반으로 구성된 두 개의 새로운 리스트가 만들어집니다. 아래는 그 동작 예시입니다.

입력값이 다음과 같다고 가정해 보겠습니다.

입력 리스트 : [Java, Python, JavaScript, Shell, Scala]

원하는 출력 결과는 다음과 같습니다.

리스트의 전반부:
[Java, Python]
리스트의 후반부:
[JavaScript, Shell, Scala]

알고리즘

리스트를 나누는 과정은 다음 단계로 진행됩니다.

1단계 - 시작합니다.
2단계 - input_list, first_list, second_list라는 세 개의 ArrayList를 선언합니다.
3단계 - 값을 정의합니다.
4단계 - .size() 함수를 사용하여 리스트의 크기를 구합니다.
5단계 - for 반복문으로 input_list를 순회하면서, 인덱스가 size/2보다 작은 요소는 .add() 함수로 first_list에 추가하고, size/2 이상인 요소는 second_list에 추가합니다.
6단계 - 결과를 출력합니다.
7단계 - 종료합니다.

예제 1: main 메서드에서 처리하기

이 예제에서는 모든 연산을 'main' 메서드 안에서 한 번에 처리합니다.

import java.util.ArrayList;
import java.util.List;
public class Demo {
   public static void main(String[] args) {
      System.out.println("필요한 패키지가 임포트되었습니다");
      List<String> input_list = new ArrayList<String>();
      input_list.add("Java");
      input_list.add("Python");
      input_list.add("JavaScript");
      input_list.add("Shell");
      input_list.add("Scala");
      System.out.println("정의된 리스트는 다음과 같습니다: " +input_list);
      List<String> first_list = new ArrayList<String>();
      List<String> second_list = new ArrayList<String>();
      int size = input_list.size();
      System.out.println("
리스트의 전반부는 다음과 같습니다: ");
      for (int i = 0; i < size / 2; i++)
         first_list.add(input_list.get(i));
      System.out.println(first_list);
      System.out.println("리스트의 후반부는 다음과 같습니다: ");
      for (int i = size / 2; i < size; i++)
         second_list.add(input_list.get(i));
      System.out.println(second_list);
   }
}

출력 결과

필요한 패키지가 임포트되었습니다
정의된 리스트는 다음과 같습니다: [Java, Python, JavaScript, Shell, Scala]

리스트의 전반부는 다음과 같습니다:
[Java, Python]
리스트의 후반부는 다음과 같습니다:
[JavaScript, Shell, Scala]

예제 2: 객체 지향 방식으로 함수 분리하기

이번에는 연산 로직을 별도의 함수로 캡슐화하여 객체 지향 프로그래밍 스타일로 구현합니다. 코드의 재사용성과 가독성이 향상됩니다.

import java.util.ArrayList;
import java.util.List;
public class Demo {
   static void split_list(List<String> input_list) {
      List<String> first_list = new ArrayList<String>();
      List<String> second_list = new ArrayList<String>();
      int size = input_list.size();
      System.out.println("
리스트의 전반부는 다음과 같습니다: ");
      for (int i = 0; i < size / 2; i++)
         first_list.add(input_list.get(i));
      System.out.println(first_list);
      System.out.println("리스트의 후반부는 다음과 같습니다: ");
      for (int i = size / 2; i < size; i++)
         second_list.add(input_list.get(i));
      System.out.println(second_list);
   }
   public static void main(String[] args) {
      System.out.println("필요한 패키지가 임포트되었습니다");
      List<String> input_list = new ArrayList<String>();
      input_list.add("Java");
      input_list.add("Python");
      input_list.add("JavaScript");
      input_list.add("Shell");
      input_list.add("Scala");
      System.out.println("정의된 리스트는 다음과 같습니다: " +input_list);
      split_list(input_list);
   }
}

출력 결과

필요한 패키지가 임포트되었습니다
정의된 리스트는 다음과 같습니다: [Java, Python, JavaScript, Shell, Scala]

리스트의 전반부는 다음과 같습니다:
[Java, Python]
리스트의 후반부는 다음과 같습니다:
[JavaScript, Shell, Scala]

마무리

이처럼 .size() 메서드로 리스트의 전체 크기를 구한 뒤, 반복문과 인덱스 비교(size / 2)만으로 간단히 리스트를 전반부와 후반부로 나눌 수 있습니다. 리스트의 크기가 홀수인 경우에는 size / 2가 자동으로 내림 처리되므로 전반부가 한 개 더 적게 나뉜다는 점을 참고하세요.