[Java][프로그래머스] - LVL.0 배열 뒤집기
정답 1
이번 문제는 참 재미있었다. 덕분에 IntStream 이라는것을 알게 됐고 사용해볼 수 있는 좋은 기회였다.
IntStream.range 로 범위를 지정해주고 forEach 로 해당 범위의 index 값을 가져와 action 을 구성해줘야 한다.
그리하여 가져온 index 를 역으로 계산하여 answer 라는 int 배열에 거꾸로 값을 넣어주는 처리를 하였다.
import java.util.stream.IntStream;
class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[num_list.length];
IntStream.range(0, num_list.length).forEach(i -> {
answer[num_list.length - 1 - i] = num_list[i];
});
return answer;
}
}
결과는 정답이었다. 하지만 코드가 그렇게 깔끔해보이지 않았다. 다른 사람들은 어떻게 하였는지 확인해보자.
정답 2
정답 2 를 보고 정말 큰 흥미를 느꼈다.
왜냐하면! Stream 이라는것에 대해서 더욱 더 관심이 가고 공부가 하고싶어졌다. 정답 2를 보기 이전에 Stream 이라는것을 간단하게 정리해봐야겠다.
Stream 이란 배열, 리스트 같은 것들의 데이터의 흐름을 처리하는 반복자로 중간 연산과 최종 연산으로 구성된다고 한다.
중간 연산 : 매핑, 필터링, 정렬과 같은 연산을 수행!
최종 연산 : 반복, 카운팅, 평균, 총합 등의 집계 처리 수행!
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.Arrays;
class Solution {
public int[] solution(int[] numList) {
List<Integer> list = Arrays.stream(numList).boxed().collect(Collectors.toList());
Collections.reverse(list);
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
상기 답안에서 boxed() 메서드는 기본 요소들의 stream 을 Stream 객체로 convert 해주는 기능이 있다. 그다음 이렇게 생성된 Stream 객체를 리스트로 바꿔준다. Collections.reverse() 메서드를 사용해 순서를 바꿔준다.
그다음 다시 해당 리스트를 stream 에 mapToInt() 메서드를 사용해 하나하나 int 값으로 변화시킨 후 toArray() 를 통해서 int[] 배열로 convert 하여 반환하였다.
Stack Over Flow 에서 찾아보니 stream reverse order 같은 경우는 내가 작성한 정답 1 처럼도 하고 아니면 Stream<Integer> 로 만든 후 reverse 를 한다고 한다. 내가 생각과 비슷한 로직이 StackOverFlow 에 나와있으니 기분이 묘하면서도 재밌다.
stream!! 더 공부해보자. 잘 알아두면 정말 큰 도움이 될것같다.
참고 :
https://stackoverflow.com/questions/24010109/java-8-stream-reverse-order
Java 8 stream reverse order
General question: What's the proper way to reverse a stream? Assuming that we don't know what type of elements that stream consists of, what's the generic way to reverse any stream? Specific quest...
stackoverflow.com
https://steady-coding.tistory.com/309
Stream이란? - 기본 개념과 특징 (JAVA)
안녕하세요? 코딩중독입니다. 저번 시간에는 주요 함수적 인터페이스를 알아 보았는데, 오늘부터는 람다가 아닌 스트림에 대한 이야기를 하려고 합니다. Stream이란? 스트림의 사전적 의미는 '흐
steady-coding.tistory.com
https://steady-coding.tistory.com/313
Stream이란? - 중간 처리 메소드의 종류와 사용 방법 (JAVA)
안녕하세요? 코딩중독입니다. 저번 시간에는 스트림 파이프라인 구조에 대해서 알아보았습니다. 오늘은 중간 처리 메소드는 어떤 것이 있고, 어떻게 사용하는지 설명하겠습니다. 중간 처리 메
steady-coding.tistory.com