목차
문제 설명
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 100
- my_string에는 숫자가 한 개 이상 포함되어 있습니다.
- my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(String my_string) {
List<Integer> arr = new ArrayList<>();
// 문자열에서 숫자만 추출하여 각 숫자를 배열에 추가
for (char c : my_string.toCharArray()) {
if (Character.isDigit(c)) { // 숫자인지 확인
arr.add(Character.getNumericValue(c)); // 숫자를 정수로 변환하여 리스트에 추가
}
}
return arr.stream().sorted().mapToInt(i -> i).toArray();
}
}
1. arr.stream()
- 동작: arr 리스트를 스트림(Stream)으로 변환한다.
- arr은 List<Integer> 타입의 리스트이고, 스트림은 리스트의 요소를 하나씩 순차적으로 처리할 수 있는 데이터 흐름을 생성한다.
- 스트림은 컬렉션과 다르게 데이터를 직접 저장하지 않으며, 데이터 처리 파이프라인을 구성하기 위해 사용된다.
- 출력 스트림 형태: Stream<Integer>
- 스트림은 arr 리스트의 요소를 스트림 데이터로 제공한다.
2. sorted()
- 동작: 스트림의 요소를 오름차순으로 정렬한다.
- Integer의 기본 정렬 방식(오름차순)을 사용하며, 이는 내부적으로 Comparator.naturalOrder()에 기반한다.
- 정렬 과정은 중간 연산(intermediate operation)으로 처리된다. 중간 연산은 실제 데이터를 처리하지 않고, 데이터 흐름만 준비한다.
- 출력 스트림 형태: Stream<Integer>
- 정렬된 순서로 데이터가 준비된 새로운 스트림을 반환한다.
3. mapToInt(i -> i)
- 동작: 각 요소를 int로 변환한다.
- 스트림의 요소가 Integer 타입인데, mapToInt는 이를 기본 타입 스트림(IntStream)으로 변환한다.
- i -> i: 람다식을 사용해 각 Integer 값을 그대로 반환하여 변환 작업을 수행한다.
- mapToInt는 숫자 데이터를 처리하기 위해 더 가볍고 효율적인 IntStream을 생성한다.
- 출력 스트림 형태: IntStream
- Integer 값을 int로 변환한 스트림.
4. toArray()
- 동작: 스트림의 요소를 배열로 변환한다.
- IntStream의 모든 요소를 하나씩 순회하며, 각 값을 int[] 배열의 요소로 복사한다.
- 스트림은 데이터를 한 번만 처리하므로, 이 단계에서 실제 데이터 처리가 일어난다. 이를 종료 연산(terminal operation)이라고 한다.
- 출력: int[]
- 정렬된 스트림의 요소가 배열로 반환된다.
'JAVA > 프로그래머스 코딩테스트 입문' 카테고리의 다른 글
[프로그래머스 LV.0] 합성수 찾기 (0) | 2024.12.02 |
---|---|
[프로그래머스 LV.0] 문자열 정렬하기 (2) (1) | 2024.12.02 |
[프로그래머스 LV.0] 숫자 찾기 (0) | 2024.11.27 |
[프로그래머스 LV.0] 369게임 (0) | 2024.11.27 |
[프로그래머스 LV.0] 배열 회전시키기 (0) | 2024.11.27 |