[문제 링크] 👉 https://www.acmicpc.net/problem/5086
설명
두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.
- 첫 번째 숫자가 두 번째 숫자의 약수이면 factor 출력
- 첫 번째 숫자가 두 번째 숫자의 배수이면 multiple 출력
- 첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니면 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");
}
}
}
}
👩💻 회고
굳이 약수를 다 구하지 않아도 됐었는데 아쉬운 풀이였다.
'BOJ 코딩테스트 > Bronze' 카테고리의 다른 글
BOJ 11721 : 열 개씩 끊어 출력하기 (Java/구현/Bronze 3) (0) | 2024.10.14 |
---|---|
BOJ 3009 : 네 번째 점 (Java/구현/Bronze 3) (0) | 2024.10.14 |
BOJ 10810 : 공 넣기 (Java/구현/Bronze 3) (2) | 2024.10.12 |
BOJ 1598 : 꼬리를 무는 숫자 나열 (Java/수학/Bronze 3) (0) | 2024.10.12 |
BOJ 1284 : 집 주소 (Java/구현/Bronze 3) (0) | 2024.10.12 |