[programmers] 리스트 자르기 - Java

정수 n과 slicer 리스트, 그리고 num_list 리스트가 주어지고, n에 따라 num_list를 슬라이싱하는 문제입니다. 주어진 조건에 따라 슬라이싱한 결과를 반환하는 solution 함수를 작성해야 합니다.
Jan 11, 2024
[programmers] 리스트 자르기 - Java

문제 설명

정수 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

👨🏻‍💻DriedPollack's Blog