1933. 간단한 N 의 약수
알고리즘/SW Expert Academy

1933. 간단한 N 의 약수

문제 정보: 1933. 간단한 N의 약수

 

입력으로 1개의 정수 N 이 주어진다.

정수 N 의 약수를 오름차순으로 출력하는 프로그램을 작성하라.

 

[제약사항]

N은 1 이상 1,000 이하의 정수이다. (1 ≤ N ≤ 1,000)
 

[입력]

입력으로 정수 N 이 주어진다.


[출력]

정수 N 의 모든 약수를 오름차순으로 출력한다.

입력
10
출력
1 2 5 10
public class solution_1933 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int N;
        N = sc.nextInt();
        long start, end;
        int cnt = 0;

        //-----------------반으로 줄였을때 약수 구하기-----------------
        List<Integer> list = new ArrayList<>();
        start = System.currentTimeMillis();
        for(int i = 1; i * 2 <= N; i++) {
            if(N % i == 0){
                ++cnt;
                list.add(i);
            }else{
                continue;
            }

            int mock = (N / i);
            if(mock % N == 0 && mock > (N / 2)){
                ++cnt;
                if(!list.contains(mock)){
                    list.add(mock);
                }
            }
        }

        list.sort(Comparator.naturalOrder());
        for(int i = 0; i < list.size(); i++){
            System.out.print((i > 0 ? " " : "") + list.get(i));
        }
        end = System.currentTimeMillis();

        System.out.println();
        System.out.print(cnt);
        System.out.println();
        System.out.println("수행시간: " + (end - start) + " ms");

        System.out.println("------------------------------------");
        cnt = 0;

        //-----------------일반적인 약수 구하기-----------------
        start = System.currentTimeMillis();
        for(int i = 1; i <= N; i++){
            if(N % i == 0){
                System.out.print((i > 1 ? " " : "") + i);
                ++cnt;
            }
        }
        end = System.currentTimeMillis();

        System.out.println();
        System.out.print(cnt);
        System.out.println();
        System.out.println("수행시간: " + (end - start) + " ms");
    }
}

 

<작업 순서 및 후기>

처음에는 반복문을 가지고 약수를 구하고 개수도 추가해서 짰다.

약수에 대해 검색을 해보니 효율적인 방법이 있다는 것을 참고하여 짜 본 결과다.

결과도 중요하지만 저런 생각의 차이가 속도를 반이나 줄이는 기적을 만드는 것을 보니...

간단히 생각하지 말고 더 좋은 코드를 짜는 생각을 할 필요를 느꼈다!