Today
-
Yesterday
-
Total
-
  • 배열의 원소만큼 추가하기
    코딩테스트 문제 풀이/프로그래머스 2023. 12. 1. 00:01

    그냥 풀면 쉬운 문제인데 Stream을 사용하려고 하니까 너무 어려운 문제였다.

    Chat 코드 🙈

    import java.util.Arrays;
    import java.util.stream.IntStream;
    class Solution {
        public int[] solution(int[] arr) {
            return Arrays
                    .stream(arr)
                    .boxed()
                    .flatMapToInt(i -> IntStream.range(0, i).map(n -> i))
                    .toArray();
        }
    }

    int 배열을 boxed()를 사용해서 wrapper 객체 배열로 변환 한 뒤,

    flatMapToInt() 메서드를 사용하여 값을 만들고

    toArray() 메서드를 사용하여 int배열로 반환하는 코드를 만들어냈다.

    flatMapToInt() 메서드에 대해서 전혀 감이 안오는데; 이것을 사용하는 부분에 대해서 좀 더 공부해 봐야겠다!


    flatMapToInt()

    wrapper 객체 배열에서 사용할 수 있는 메서드이다.

    맨 마지막줄에 있는 flatMapToInt

    IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper);

    T를 입력받아서 하나의 IntStream 을 반환하는 메서드이다.

    이 말은 T가 분명히 1개 이상 들어올테니 IntStream도 1개 이상이 될 건데, 이 여러개의 IntStream을 flatMapToInt가 단 하나의 IntStream으로 합쳐준다.

    오오, 어려운데 너무 유용하다는 생각이 들었다. 여러번 풀어봐야겠다!


    IntStream.range(0, i).map(n -> i)

    하나씩 분해해 본다면

    IntStream.range(0, i)

    0에서 i-1까지의 연속된 정수를 갖는 IntStream을 반환한다. ex) i = 3이면, 반환 값은 0,1,2

    .map(n -> i)

    n을 i로 반환한다.

    range에서 넘어온 값을 map에서 처리하기 때문에 map에는 0,1,2가 들어온다.

    하지만 map에서는 들어오는 값 n을 i로 변환하기 때문에 map의 반환값은 3,3,3을 갖는 IntStream이 된다.

    따라서 flatMapToInt(i -> IntStream.range(0, i).map(n -> i)) 문장은 arr이 [ 5 , 1 , 4 ]일 때

    [ 5 , 5 , 5 , 5 , 5 ] 인 IntStream 과, [ 1 ] 인 IntStream , [ 4 , 4 , 4 , 4 ] 인 IntStream 을

    하나의 IntStream으로 합쳐서 [ 5 , 5 , 5 , 5 , 5 , 1 , 4 , 4 , 4 , 4 ]를 만들어 준다



    이것도 오랜만에 작성해보네 😊 오랜만에 작성하는 김에 업데이트 쳐봄 ㅋㅋ 한번 풀 때 마다 🔵 하나씩 지우기


    다시 풀어봐야됨

    23년 5월 시도한 날짜 : 14, 15, 16, 17, 18, 22 실패한 날짜 : 14 성공한 날짜 : 15, 16, 17, 18, 22

Designed by Tistory / Custom by 얼거스