이 글에서는 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가 자동으로 내림 처리되므로 전반부가 한 개 더 적게 나뉜다는 점을 참고하세요.