-
배열의 원소만큼 추가하기코딩테스트 문제 풀이/프로그래머스 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
'코딩테스트 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 홀수 vs 짝수 (0) 2023.12.04 프로그래머스 : 공백으로 구분하기 2 (0) 2023.12.04 꼬리 문자열 (0) 2023.12.01 뒤에서 5등까지 (0) 2023.12.01 프로그래머스: 마지막 두 원소 (0) 2023.11.27