[백준 BOJ] 5086번 배수와 약수 (C++/cpp)

2022. 9. 30. 16:16PS (Program Solving)/BOJ (백준)

문제 설명

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

 

5086번: 배수와 약수

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

www.acmicpc.net

백준 BOJ 5086번 배수와 약수 문제 사진

 

접근 방법 - 무한 반복문을 이용한 조건문 판별 문제

백준의 5086번 문제는 무한 반복문과 조건문을 응용하여 해결해야 하는 문제이다.

해당 문제는, 각 케이스마다 입력되는 두 숫자의 관계가 배수인지 약수인지, 또는 아무것도 아닌지를 출력해야 하는 문제이다.

필자는 별다른 연산 과정 없이 단순히 무한 반복문과 조건문만 이용하여 이 문제를 해결할 수 있었다.

배수와 약수의 각 개념과 둘의 차이점만 잘 인지하고 있다면, 쉽게 풀 수 있는 문제일 것으로 예상된다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 입력값을 저장할 2개의 변수(a, b)를 미리 선언해둔다.

 

2) 무한 반복문을 통해 아래의 연산을 수행한다.

- a와 b의 값을 순차적으로 입력받는다.

(여기서, 2개의 값 모두 0을 입력받았다면, 해당 무한 반복문을 탈출한다.)

- 3가지의 조건문을 걸어 각각에 맞는 출력문을 수행하도록 한다.

만일 b가 a로 나누어 떨어진다면, 이는 a가 b의 약수임을 뜻한다. 따라서 이 경우엔, "factor"을 출력하도록 한다.

만일 a가 b로 나누어 떨어진다면, 이는 a가 b의 배수임을 뜻한다. 따라서 이 경우엔, "multiple"을 출력하도록 한다.

위 2가지 경우가 모두 아니라면, 이 둘은 아무런 관계도 없음을 뜻한다. 따라서 이 경우엔, "neither"을 출력하도록 한다.

 

3) 위 반복문이 모두 수행되었다면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 5086번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int a,b;
	while(1){
	    cin>>a>>b;
	    if(a==0&&b==0){break;}
	    
	    if(b%a==0){
	        cout<<"factor"<<endl;
	    }
	    else if(a%b==0){
	        cout<<"multiple"<<endl;
	    }
	    else{
	        cout<<"neither"<<endl;
	    }
	}
}

 

제출 결과

백준 BOJ 5086번 배수와 약수 문제 C++ 제출 결과

(2022.07.12 백준 5086번 문제 제출 결과)

반응형