기록 보관소

[Baekjoon/백준] 5086번: 배수와 약수(C/C++) 본문

코딩 테스트/백준

[Baekjoon/백준] 5086번: 배수와 약수(C/C++)

JongHoon 2022. 3. 16. 21:20

단계별로 풀어보기 17단계(정수론 및 조합론) 1번 문제

https://www.acmicpc.net/step/18

 

정수론 및 조합론 단계

N개의 물건 중 순서를 고려하지 않고 K개를 고르는 경우의 수, 이항 계수를 구하는 문제

www.acmicpc.net


백준 5086번: 배수와 약수

https://www.acmicpc.net/problem/5086

 

5086번: 배수와 약수

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

www.acmicpc.net


문제 설명

4 × 3 = 12이다.

이 식을 통해 다음과 같은 사실을 알 수 있다.

3은 12의 약수이고, 12는 3의 배수이다.

4도 12의 약수이고, 12는 4의 배수이다.

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

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

입력과 출력

입력: 입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 10,000이 넘지않는 두 자연수로 이루어져 있다. 마지막 줄에는 0이 2개 주어진다. 두 수가 같은 경우는 없다.

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


접근 방법

이번 문제는 두 자연수를 입력받아서 첫 번째 숫자가 두 번째 숫자의 약수라면 factor, 배수라면 multiple, 둘 다 아니면 neither을 0 0 을 입력받을때까지 반복해서 출력하는 문제다.

약수나 배수나 결국 둘 다 서로 나눴을 때 나머지가 0이라는 점만 기억하면 매우 간단하다. while문을 써서 두 자연수를 입력받아 만약 둘 다 0이라면 종료되게 하고, 아니면 그 숫자들을 서로 나눠서 0일때 약수/배수를 출력하게 만들어준다. 만약 0이 아니라면 둘 다 아님을 출력하도록 만들면 문제를 해결할 수 있다.


코드

#include <iostream>
using namespace std;

int main(int argc, char *argv[]) {
	int a, b;

	while (1) {
		cin >> a >> b;

		if (a != 0 && b != 0) {
			if (b % a == 0)
				cout << "factor" << endl;
			else if (a % b == 0)
				cout << "multiple" << endl;
			else
				cout << "neither" << endl;
		}
		else
			break;
	}

	return 0;
}

결과

백준 제출 결과