백준/C++

[백준] 5086번: 배수와 약수 | C++ 풀이

성실한 당근농부 2023. 6. 6. 14:30

# 문제

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

 

 


 

# 풀이

규칙찾기의 일반 수학 1을 넘어 약수와 배수, 소수 파트로 넘어왔다.

간단한 문제이니 바로 정답 소스코드를 확인해보자.

 

#include <iostream>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);	// 두 표준 입출력 동기화 해제
    cin.tie(NULL); // 입력과 출력 묶음을 풀기
    
    int a, b;
    while (1){
        cin >> a >> b;
        if(a == 0 && b == 0) break;
        
        if(b%a == 0) cout << "factor\n";
        else if(a%b == 0) cout << "multiple\n";
        else cout << "neither\n";
    }
    return 0;
}

 

우선 테스트 케이스의 갯수가 주어진 것이 아니라, 0 0이 입력될 때까지 해당 과정을 반복해야하므로 무한루프 while문을 실행해 그 안에서 연산을 진행해주었다. 루프 안에서 a, b를 입력받는데 a와 b 값이 모두 0일 경우, 테스트 케이스의 종료로 보고 while문을 빠져나와 연산을 끝냈다.

 

 

 

if(b%a == 0) cout << "factor\n";
else if(a%b == 0) cout << "multiple\n";
else cout << "neither\n";

0 0이 아닐 경우에는 문제에서 제시한 조건으로 테스트 케이스를 분류해 준다.

 

1. 첫 번째 숫자가 두 번째 숫자의 약수이다.

: 예제 입력의 8 16이 1번 케이스에 해당하는데 16을 8로 나눈 나머지 값이 0일 경우, 우리는 8이 16의 약수임을 알 수 있다. 따라서 두번째 숫자를 첫 번째 숫자로 나눈 나머지가 0일 경우, 1번 케이스에 해당함을 알 수 있다.

 

2. 첫 번째 숫자가 두 번째 숫자의 배수이다.

: 예제 입력의 32 4가 2번 케이스에 해당한다. 1번 케이스와는 반대로 생각해주면 되는데, 첫번째 숫자를 두 번째 숫자로 나눈 나머지가 0인 경우다.

 

3. 첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니다.

: 마지막은 1, 2번 케이스에 걸리지 않은 테스트 케이스므로 else문으로 묶어 처리해주면 된다.

 

문제에서 요구한 출력값과 테스트 케이스 분류를 조합해 코드를 작성하면 끝!

 

 

 

 

 

 


 

 

 

5086번: 배수와 약수

각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.

www.acmicpc.net

728x90