프로그래머스 - 코딩테스트

[Java][프로그래머스] - LVL.0 배열 뒤집기

Denny Code 2023. 1. 23. 21:06


정답 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