Stay Hungry Stay Foolish

BOJ 코딩테스트/Bronze

BOJ 5086 : 배수와 약수 (Java/수학/Bronze 3)

dev스카이 2024. 10. 14. 15:05

[문제 링크] 👉 https://www.acmicpc.net/problem/5086


설명

두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.

  1. 첫 번째 숫자가 두 번째 숫자의 약수이면 factor 출력
  2. 첫 번째 숫자가 두 번째 숫자의 배수이면 multiple 출력
  3. 첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니면 neither 출력

두 수가 0이면, 프로그램을 종료한다.

 

풀이

if {
  	...
} else if {
	...
} else {
	...
}

 

 

Solution

sol.1

import java.io.*;

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

        while (true) {
            String[] nums = br.readLine().split(" ");
            int a = Integer.parseInt(nums[0]);
            int b = Integer.parseInt(nums[1]);

            if (a == 0 && b == 0) {
                break;
            }
            int check = 0;
            for (int i = 1; i <= 10000; i++) {
                if (b % i == 0) { //약수 중에서
                    if (i == a) {
                        System.out.println("factor");
                        check = 1;
                        break;
                    }
                } else if (b * i == a) {
                    System.out.println("multiple");
                    check = 1;
                    break;
                }
            }
            if (check == 0) {
                System.out.println("neither");
            }
        }
    }
}

 

첫 번째 풀이는 반복문으로 약수를 일일이 구하면서 출력하는 코드이다. 메모리와 시간을 많이 잡아먹기 때문에 좋은 풀이는 아니다.  

 

 

sol.2

import java.io.*;

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

        while (true) {
            String[] nums = br.readLine().split(" ");
            int a = Integer.parseInt(nums[0]);
            int b = Integer.parseInt(nums[1]);

            if (a == 0 && b == 0) {
                break;
            }
            if (b % a == 0) { //약수
                System.out.println("factor");
            } else if (a % b == 0) { //배수
                System.out.println("multiple");
            } else { //둘 다 아니면
                System.out.println("neither");
            }
        }
    }
}

 

👩‍💻 회고

굳이 약수를 다 구하지 않아도 됐었는데 아쉬운 풀이였다.