[programmers] 리스트 자르기 - Java
정수 n과 slicer 리스트, 그리고 num_list 리스트가 주어지고, n에 따라 num_list를 슬라이싱하는 문제입니다. 주어진 조건에 따라 슬라이싱한 결과를 반환하는 solution 함수를 작성해야 합니다.
Jan 11, 2024
문제 설명
정수
n
과 정수 3개가 담긴 리스트 slicer
그리고 정수 여러 개가 담긴 리스트 num_list
가 주어집니다. slicer
에 담긴 정수를 차례대로 a, b, c라고 할 때, n
에 따라 다음과 같이 num_list
를 슬라이싱 하려고 합니다.n = 1
:num_list
의 0번 인덱스부터b
번 인덱스까지
n = 2
:num_list
의a
번 인덱스부터 마지막 인덱스까지
n = 3
:num_list
의a
번 인덱스부터b
번 인덱스까지
n = 4
:num_list
의a
번 인덱스부터b
번 인덱스까지c
간격으로
올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
n
은 1, 2, 3, 4 중 하나입니다.
slicer
의 길이 = 3
slicer
에 담긴 정수를 차례대로 a, b, c라고 할 때- 0 ≤ a ≤ b ≤
num_list
의 길이 - 1 - 1 ≤ c ≤ 3
- 5 ≤
num_list
의 길이 ≤ 30
- 0 ≤
num_list
의 원소 ≤ 100
입출력 예
n | slicer | num_list | result |
3 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 3, 4, 5, 6] |
4 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 4, 6] |
입출력 예 설명
입출력 예 #1
- [1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 자른 리스트는 [2, 3, 4, 5, 6]입니다.
입출력 예 #2
- [1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 2개 간격으로 자른 리스트는 [2, 4, 6]입니다.
solution.java
import java.util.*; class Solution { public int[] solution(int n, int[] slicer, int[] num_list) { List<Integer> list = new ArrayList<>(); int a = slicer[0]; int b = slicer[1]; int c = slicer[2]; if(n == 1) { for(int i =0; i<b+1; i++) { list.add(num_list[i]); } }else if(n == 2) { for(int i = a; i<num_list.length; i++) { list.add(num_list[i]); } }else if(n ==3) { for(int i = a; i<b+1; i++) { list.add(num_list[i]); } }else if(n == 4) { for(int i = a; i<b+1; i+=c) { list.add(num_list[i]); } } int[] answer = list.stream().mapToInt(x -> x).toArray(); return answer; } }
핵심 키워드
- ArrayList는 일반 배열과 동일하게 연속된 메모리 공간을 사용한다. 하지만 배열과 달리 크기가 가변적이다.
- for 문을 통해 ArrayList에 넣을 arr의 요소의 인덱스를 조절한다.
- stream은 java8부터 지원하며, 컬렉션에 저장되어 있는 요소들을 하나씩 순회하면서 처리할 수 있는 기능을 제공한다.
- mapToInt() 메서드는 stream을 IntStream으로 변환해주는 메서드다.
- IntStream은 기본 정수 요소의 열을 만드는 데 사용한다.
- toArray()는 list 내의 모든 요소를 적절한 순서로 포함하는 배열로 만들어 반환하는 메서드다.
결론!
해당 문제를 풀면서 리스트로 이루어진 요소들을 정수형 배열로 바꾸는 방법에서 문제를 겪었고, 이를 stream()과 mapToInt() 메서드, toArray() 메서드를 통해 해결할 수 있었다.
Share article