백준 알고리즘 단계별로 풀어보기/약수, 배수와 소수

백준 알고리즘 5086번 배수와 약수 (C언어)

MNMNWVWV 2023. 3. 2. 20:43
728x90
반응형
브론즈Ⅲ

 

 

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"을 출력하기 위한 코드이다.

 

 

느낀점

 

- 초등학교 수준의 '약수'와 '배수'의 개념과 산술연산자 '%'만 안다면 쉽게 풀 수 있는 문제인 것 같다.

728x90
반응형