1 minute read

짝수는 싫어요

문제 설명

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ n ≤ 100

입출력 예

n result
10 [1, 3, 5, 7, 9]
15 [1, 3, 5, 7, 9, 11, 13, 15]

입출력 예 설명

입출력 예 #1

  • 10 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9]를 return합니다.

입출력 예 #2

  • 15 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9, 11, 13, 15]를 return합니다.

나의 풀이 코드

import java.util.ArrayList;

class Solution {
    public int[] solution(int n) {
        int[] answer = {};
        ArrayList<Integer> list = new ArrayList<Integer>(); // 정수 타입으로 지정
        
        for (int i=1; i<=n; i++){
           if (i%2==1){
               list.add(i);
           }
        }
        int[] arr = list.stream()   //arraylist를 array로 바꾸는 메서드이다.
	                    .mapToInt(Integer::intValue)    //Integer의 intValue() 메서드를 참조해서 값타입인 int로 언박싱한다.
    	                .toArray(); //IntStream의 원소를 배열로 변환한다.
        
        answer=arr;
        
        return answer;
    }
}

문제를 풀기 위해서 arraylist를 array로 바꾸는 메서드를 배웠다.
근데 다른사람이 푼 코드를 보니 배열로 안바꾸어도 정답이 되는듯 하다.

배운점

import java.util.stream.IntStream;

class Solution {
    public int[] solution(int n) {
        return IntStream.rangeClosed(0, n) //0부터 n까지의 정수 스트림을 생성하는 메서드이다.
                        .filter(value -> value % 2 == 1)    //필터링 하는 메서드이다. 
                        .toArray(); //array로 변환한다.
    }
}

arraylist를 array로 바꾸기 위해서 검색하고, 남이 푼 코드를 보면 stream을 사용한다.

stream
* 데이터를 담는 저장소는 아니다.
* 데이터를 변경하지 않는다.
* 재사용할 수 없다.
* 각 요소가 1번씩 처리된다.
* 무제한일 수도 있다.

stream은 데이터.Stream생성().중간연산()...중간 연산(); 구조이다,
종료연산에서 Stream을 리턴하지 않는다.




Leave a comment