본문 바로가기
하루하루/프로그래머스 문제풀이

[Lv.0 - Java] 120905. n의 배수 고르기

by 키튼햄 2023. 11. 22.

문제

 

 

풀이

n의 배수인 것만 뽑아내야 하기때문에 num%n==0 인 것을 뽑아내면 된다 생각했다.

for문을 이용하는 것과 stream을 이용하는 것 두 개를 생각했다. 난 단순하게 stream이랑 정적배열 이용할 생각만 했는데 동적배열을 사용하는 방법도 있길래 셋다 정리해보고자한다.

 

stream 사용

1. import java.util.Arrays;  => Arrays 클래스를 사용하기 위해 java.util 패키지에서 Arrays 클래스를 가져온다.

2. Arrays.stream(numlist)로 numlist 배열로부터 스트림을 생성한다. (-> 배열의 요소를 다루기 쉽게 하기 위함이다.)

3. .filter(value -> value%n==0) 을 사용해서 조건을 줘서 요소를 필터링한다. value값 중 n의 배수인 것만 선택한다.

4. .toArray() 는 필터를 이용해서 필터링된 요소들을 배열로 변환한다. 

 

for문 사용(1) - ArrayList 사용(동적배열사용)

1. 마찬가지로  import java.util.Arrays; 를 사용해 Arrays 클래스를 가져온다.

2. ArrayList<Integer> arr = new ArrayList<>(); 사용해서 정수값을 저장할 동적배열인 ArrayList를 생성한다.

조건인 num%n==0을 충족시키려면 단순한 int배열(정적배열)을 사용하는 것이 아닌 크기 조절이 가능한 동적 배열을 사용하는 것이 좋기 때문에 ArrayList로 배열을 초기화 해주는 것이다. 물론 정적배열을 이용해서 풀수도 있다.(이 방법은 3번째에 설명.)

3. for문과 if문을 사용해 num%n==0인 n의 배수를 찾아 arr 배열에 요소를 추가한다.

4. int[] answer = new int[arr.size()]; 로 n의 배수를 담을 수 있는 정적배열을 arr 크기에 맞게 생성한다.

5. for문을 이용해 arr에 저장된 요소들을 answer 배열로 옮긴다.

6. answer 배열을 반한다.

 

for문 사용(2) - 정적배열만 사용

1. 먼저 변수count를 초기화선언하고, for문을 통해 배열 numlist에서 n의 배수가 나올때마다 count 수를 증가시킨다. 이건 int[] 배열의 크기를 구하기 위해 사용한 코드이다.

2. n의 배수를 담을 정적배열인 answer를 1번에서 구한 count를 크기로 맞춰 생성한다.

3. answer에서 사용할 인덱스인 idx를 초기화선언해주고, 다시 배열 numlist 를 다시 for문을 이용해 순회한다. if문에서 n의 배수인 수를 찾아 answer에 요소를 추가하고 idx를 증가시킨다.

4. answer 배열을 반환한다.

 

 

 

코드

1. stream 사용

import java.util.Arrays;

class Solution {
    public int[] solution(int n, int[] numlist) {
        return Arrays.stream(numlist).filter(value -> value%n==0).toArray();
    }
}

 

2. for문 사용(1) - ArrayList 사용

import java.util.ArrayList;

class Solution {
    public int[] solution(int n, int[] numlist) {
        ArrayList<Integer> arr = new ArrayList<>();
        
        for(int num : numlist){
            if(num % n == 0){
                arr.add(num);
            }
        }

        int[] answer = new int[arr.size()];
        for(int i = 0; i < arr.size(); i++){
            answer[i] = arr.get(i);
        }
        return answer;
    }
}

 

3.

class Solution {
    public int[] solution(int n, int[] numlist) {
        int count = 0;
        for(int i : numlist){
            if(i%n==0){
                count++;
            }
        }

        int[] answer = new int[count];
        int idx = 0;
        for(int i : numlist){
            if(i%n==0){
                answer[idx]=i;
                idx++;
            }
        }
        return answer;
    }
}