알고리즘 공부/백준 문제 랜덤 디펜스
백준 2609번 / B1 / C++
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;
}
}
}
반응형