JAVA/프로그래머스 코딩테스트 입문

[프로그래머스 LV.0] 문자열 정렬하기 (1)

sundori 2024. 11. 27. 22:30

목차

     

    문제 설명

    문자열 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[]
      • 정렬된 스트림의 요소가 배열로 반환된다.