프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] n의 배수 고르기(Java)

Sigfriede 2023. 3. 29. 20:43

  문제 설명

  정수 n과 정수 배열 numlist가 매개변수로 주어질 때, numlist에서 n의 배수가 아닌 수들을 제거한 배열을 return 하도록 solution 함수를 완성해주세요.

 

  제한사항

  • 1 <= n <= 10,000
  • 1 <= numlist의 크기 <= 100
  • 1 <= numlist의 원소 <= 100,000

 

  입출력 예

n numlist result
3 [4, 5, 6, 7, 8, 9, 10, 11, 12] [6, 9, 12]
5 [1, 9, 3, 10, 13, 5] [10, 5]
12 [2, 100, 120, 600, 12, 12] [120, 600, 12, 12]
class Solution {
    public int[] solution(int n, int[] numlist) {
        int[] arr = new int[numlist.length];
        int cnt = 0;
        for (int i = 0; i < numlist.length; i++) {
            if (numlist[i] % n == 0) {
                arr[cnt] = numlist[i];
                cnt++;
            }
        }
        int[] answer = new int[cnt];
        for (int i = 0; i < cnt; i++) {
             answer[i] = arr[i];
        }
        return answer;
    }
}

  이 코드는 크게 두 가지로 나눌 수 있습니다. n의 배수인 원소를 구하는 부분과 answer 배열의 배열 크기를 구하는 부분입니다. 우선 for문으로 numlist의 길이만큼 순회하면서 numlist의 i번째 원소가 n으로 나누어떨어지는지 확인합니다. 맞다면 n의 배수이므로 numlist의 i번째 원소를 arr 배열의 cnt 번째 위치에 추가해줍니다. 조건에 부합할 때 cnt가 1씩 증가합니다. 여기서 증가한 cnt 값은 이후 answer 배열의 크기를 지정할 때 쓰입니다. 조건을 충족하는 원소의 수와 증가한 cnt 수가 똑같기 때문입니다.

  이후 answer 배열을 만들고, for문이 cnt만큼 순회하면서 answer[i]에 arr[i] 값을 할당해줍니다. 입출력 예에 중복값을 허용하고 있으므로 중복값을 제거하는 등은 하지 않았습니다.