새소식

Programmers Coding Test/Java

[프로그래머스 120897] Java - 코딩테스트 입문 / 약수 구하기

  • -

 

 

약수 구하기

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120897

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

1)  문제

정수 n이 매개변수로 주어질 때, 
n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ n ≤ 10,000

 

 

 

2)  예시

 

 

Result Table
n result
24 [1, 2, 3, 4, 6, 8, 12, 24]
29 [1, 29]

 

 

 

입출력 예 #1
24의 약수를 오름차순으로 담은 배열 [1, 2, 3, 4, 6, 8, 12, 24]를 return합니다.


입출력 예 #2
29의 약수를 오름차순으로 담은 배열 [1, 29]를 return합니다.

 

 

 

 

 

 

3)  풀이

 

0. java util 패키지의 ArrayList와 List를 사용하기위해 import합니다.

● import java.util.ArrayList;
    import java.util.List;

 

 

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 정수 n을 매개변수로 하는 solution 메소드를 선언합니다.

solution은 정수배열을 반환하므로 데이터타입을 int[]로 합니다.

● public int[] solution(int n) {

 

 

 

 

3. 제한사항을 확인하고, 만족하지 않는다면 예외처리합니다.

●     if(n < 1 || n > 10000){
            throw new IllegalArgumentException("n은 1이상 10000이하입니다.");
        }



 

4. 정수타입의 List객체 divisors를 생성합니다.

for문을 이용하여 i가 1씩 늘려가며, n을 나눴을 때 나머지가 0이 되는 값이 약수이므로, divisors List에 추가합니다.

(여기서 List<Integer>인 이유는. Java가 <>안에 들어가는 제네릭 파라미터에는 참조 타입에 대해서만 작동하며, int와 같은 원시(primitive) 타입은 제네릭 타입의 인자로 사용할 수 없습니다.)

●      List<Integer> divisors = new ArrayList<>();

        for (int i = 1; i <= n; i++) {
            if (n % i == 0) {
                divisors.add(i);
            }
        }

 

 

 

 

 

5. Integer 타입으로 만들어진 divisors List를 정수배열로 반환하기 위해 변환하는 과정을 거칩니다.

●      int[] result = new int[divisors.size()];
        for (int i = 0; i < divisors.size(); i++) {
            result[i] = divisors.get(i);
        }

        return result;
    }
}

 

 

 

 

 

 

 

 

 

4)  코드

 

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[] solution(int n) {
        
        if(n < 1 || n > 10000){
            throw new IllegalArgumentException("n은 1이상 10000이하입니다.");
        }

        List<Integer> divisors = new ArrayList<>();

        for (int i = 1; i <= n; i++) {
            if (n % i == 0) {
                divisors.add(i);
            }
        }

        int[] result = new int[divisors.size()];
        for (int i = 0; i < divisors.size(); i++) {
            result[i] = divisors.get(i);
        }

        return result;
    }
}

 

 

 

 

 

 

 

5)  느낀점

List 생성시 타입을 int로 만드는 실수, List의 크기는 size를 이용해야하는데 length를 사용하려했던 실수가 있었습니다.

다시 한번 상기할 수 있었습니다.

 

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.