EJH 2025. 7. 28. 21:59
반응형

문제주소 : https://www.acmicpc.net/problem/2609
문제이름 : 최대공약수와 최대공배수
문제번호 :2609
난이도 : B1

소요시간 : 6m 12s

 

최대공약수와 최소공배수 성공

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 137727 79751 65024 57.729%

문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

예제 입력 1 

24 18

예제 출력 1 

6
72

 

 

풀이

B1 문제여서 단순하게 반복했다.

최대 공약수의 경우 두 수중 작은수부터 시작해 1씩 줄이며 나머지연산을 했고,

최소 공배수는 두 수 중 작은수를 처음수만큼 더해가며 비교했다.

다만 유클리드 호제법을 이용하면 최대 공약수의 시간복잡도를 충분히 줄일수 있다.

#include <iostream>
using namespace std;
int main() {
	int first, second;
	cin >> first >> second;

	int n = min(first, second);
	while (n) {
		if (first % n == 0 && second % n == 0) {
			cout << n << endl;
			break;
		}
		n--;
	}

	int m = first;
	n = second;
	while (1) {
		if (m == n) {
			cout << m << endl;
			break;
		}

		if (m > n) {
			n += second;
			
		}
		else if(n>m) {
			m += first;
		}
	}
}
반응형