백준 알고리즘 5086번 배수와 약수 (C언어)
브론즈Ⅲ
https://www.acmicpc.net/problem/5086
5086번: 배수와 약수
각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.
www.acmicpc.net
풀이 방법
-첫 번째 숫자가 두 번째 숫자의 약수일 경우 두 번째 숫자를 첫 번째 숫자로 나눈 나머지가 0이 될 것이다.
-첫 번째 숫자가 두 번째 숫자의 배수일 경우 첫 번째 숫자를 두 번째 숫자로 나눈 나머지가 0이 될 것이다.
위의 두가지 사실을 이용해 문제를 풀 수 있다.
내 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#pragma warning(disable:4996)
#include <stdio.h>
int main(void) {
int n1, n2;
while (1) {
scanf("%d %d", &n1, &n2);
if (n1 == 0 && n2 == 0)
return 0;
//약수일때
if (n2 % n1 == 0)
printf("factor\n");
//배수일때
else if (n1 % n2 == 0)
printf("multiple\n");
//약수x, 배수x 일때
else
printf("neither\n");
}
return 0;
}
|
cs |
코드설명
1 | scanf 함수를 사용할 때 경고창을 띄우지 않도록 하는 전처리 지시문이다.
2 | scanf, printf 함수를 사용하기 위한 전처리 지시문이다.
8~11 | 첫 번째 수와 두 번째 수가 모두 0을 입력받을 때까지 첫 번째 수와 두 번째 수를 입력받아야 하므로, while문을 무한반복 시키고, 첫 번째 수와 두 번째 수가 모두 0을 입력 받았을 때 프로그램을 종료하도록 하는 코드이다.
13~15 | '첫 번째 숫자가 두 번째 숫자의 약수일 경우 두 번째 숫자를 첫 번째 숫자로 나눈 나머지가 0이 될 것이다.' 다음 규칙을 적용한 코드이다.
16~18 | '첫 번째 숫자가 두 번째 숫자의 배수일 경우 첫 번째 숫자를 두 번째 숫자로 나눈 나머지가 0이 될 것이다.' 다음 규칙을 적용한 코드이다.
20~21 | 첫 번째 숫자와 두 번째 숫자의 관계가 약수도 배수도 아닐 때, "neither"을 출력하기 위한 코드이다.
느낀점
- 초등학교 수준의 '약수'와 '배수'의 개념과 산술연산자 '%'만 안다면 쉽게 풀 수 있는 문제인 것 같다.