[백준] 2501번 - 약수 구하기 (Java)

Jina·2023년 7월 30일
0

Java

목록 보기
9/13

문제 링크

첫번째 제출

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int num;        // 나누어지는 수
        int k;
        int result = 0; // k번째로 작은 약수 저장

        /*
        num, k 입력 받기
         */
        String str = br.readLine();
        num = Integer.parseInt(str.split(" ")[0]);
        k = Integer.parseInt(str.split(" ")[1]);


        /*
        k번째로 작은 약수 찾기
         */
        int count = 0;      // 약수의 개수

        for(int i = 1; i <= num; i++){
            if(count < k){
                // k번째 약수를 찾을 때까지 반복

                if(num % i == 0){
                    // i가 약수이면
                    result = i;
                    count++;
                }
            }
        }

        /*
        출력
         */
        if(count < k)     // 약수의 개수가 적어서 k번째 약수가 없을 경우
            System.out.println(0);  //0 출력
        else
            System.out.println(result); // 그렇지 않으면 result 출력
    }
}

💡 개선해보기

기존 코드

나는 k번째 약수를 찾을 때까지 반복하도록 했고,

 int count = 0;      // 약수의 개수

        for(int i = 1; i <= num; i++){
            if(count < k){
                // k번째 약수를 찾을 때까지 반복

                if(num % i == 0){
                    // i가 약수이면
                    result = i;
                    count++;
                }
            }
        }

count값이 k보다 작다면 k번째 약수가 없는 것이므로 0을 출력하도록 했다.

        if(count < k)     // 약수의 개수가 적어서 k번째 약수가 없을 경우
            System.out.println(0);  //0 출력
        else
            System.out.println(result); // 그렇지 않으면 result 출력

개선

count가 k이면 result에 i를 저장한다.
만약 약수의 개수가 적어 k번째 약수가 없다면 result가 초기값 그대로 0이다.

        int count = 0;      // 약수의 개수

        for(int i = 1; i <= num; i++){
                if(num % i == 0){
                    count++;           // i가 약수면 count
                    if(count == k)  result = i;     // k번째 약수면 저장
                }
        }

따라서 간단히 result만 출력하면 된다!

        System.out.println(result);

최종 제출

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int num;        // 나누어지는 수
        int k;
        int result = 0; // k번째로 작은 약수 저장

        /*
        num, k 입력 받기
         */
        String str = br.readLine();
        num = Integer.parseInt(str.split(" ")[0]);
        k = Integer.parseInt(str.split(" ")[1]);


        /*
        k번째로 작은 약수 찾기
         */
        int count = 0;      // 약수의 개수

        for(int i = 1; i <= num; i++){
                if(num % i == 0){
                    count++;           // i가 약수면 count
                    if(count == k)  result = i;     // k번째 약수면 저장
                }
        }

        /*
        출력
         */
        System.out.println(result);
        // 약수의 개수가 적어서 k번째 약수가 없다면 기본값인 0이 출력됨
    }
}

0개의 댓글

관련 채용 정보