View

300x250

문제링크

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

문제

4 × 3 = 12이다.

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

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

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

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

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

입력

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

출력

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

조건

  • 시간 제한 : 1s
  • 메모리 제한 : 128MB

해설

앞의 수가 뒤 수의 약수인지, 배수인지, 두 관계가 아닌지를 판별하는 문제이다. 앞의 수를 A, 뒤의 수를 B라고 하자. 이를 구분하기 위해서 A와 B의 대소관계에 따라 약수, 배수가 될 수 있는 경우를 구분하여 비교해본다.

풀이

입력이 0 0이 들어오면 프로그램이 종료되므로, 아래와 같이 해당 입력이 들어오면 반복문을 탈출하도록 만들어주었다.

int A, B;

while(true) {
    cin >> A >> B;
    if(A == 0 && B == 0) break;
	 
	// 비교문 처리   
}

A가 B보다 작을 때 약수인지를 확인하고, A가 B보다 클 때 배수인지를 확인해야 한다. 이를 확인하는 쉬운 방법은 나누었을 때 나머지가 0인지 아닌지를 확인하는 것이고, 해당하지 않는다면 neither를 출력한다.

if(A < B) {
    if(B % A == 0) {
        cout << "factor\n";
    } else {
        cout << "neither\n";
    }
} else {
    if(A % B == 0) {
        cout << "multiple\n";
    } else {
        cout << "neither\n";
    }
}

코멘트

EZEZ


코드

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int A, B;
    
    while(true) {
        cin >> A >> B;
        if(A == 0 && B == 0) break;
        
        if(A < B) {
            if(B % A == 0) {
                cout << "factor\n";
            } else {
                cout << "neither\n";
            }
        } else {
            if(A % B == 0) {
                cout << "multiple\n";
            } else {
                cout << "neither\n";
            }
        }
    }
    
    return 0;
}
320x100

'Develop > 알고리즘' 카테고리의 다른 글

[백준] 2565 - 전깃줄  (0) 2021.12.26
[백준] 9184 - 신나는 함수 실행  (0) 2021.12.26
[백준] 7579 - 앱  (0) 2021.12.26
[백준] 13305 - 주유소  (0) 2021.12.26
[백준] 11047 - 동전 0  (0) 2021.12.26
Share Link
reply
반응형
«   2024/12   »
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 28
29 30 31