# 문제
두 수가 주어졌을 때, 다음 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문으로 묶어 처리해주면 된다.
문제에서 요구한 출력값과 테스트 케이스 분류를 조합해 코드를 작성하면 끝!
728x90
'백준 > C++' 카테고리의 다른 글
[백준] 9506번: 약수들의 합 | C++ 풀이 (0) | 2023.06.08 |
---|---|
[백준] 2501번: 약수 구하기 | C++ 풀이 (0) | 2023.06.07 |
[백준] 10757번: 큰 수 A+B | C++ 풀이 (0) | 2023.06.05 |
[백준] 2869번: 달팽이는 올라가고 싶다 | C++ 풀이 (0) | 2023.06.04 |
[백준] 1193번: 분수찾기 | C++ 풀이 (0) | 2023.06.03 |