본문 바로가기
코딩테스트 준비/백준

[백준 13241번][C++] 최소공배수

by 스테디코디스트 2023. 8. 7.
반응형

<문제 소개>


<소스 코드>

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <unordered_map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdlib>
using namespace std;

int main()
{
	// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	long long int A, B;
	cin >> A >> B;

	long long small = A > B ? B : A;
	long long big = A == small ? B : A;

	long long k = 1;
	long long minVal = small; // 최소 공배수

	while (true)
	{
		if (minVal % big == 0) break;

		minVal = small * ++k;
	}

	cout << minVal;

	return 0;
}

<풀이과정>

1. long long형으로 A와 B를 입력받는다.

2. A와 B 중 작은 수를 small에 대입, 큰 수를 big으로 대입한다.

3. 최소공배수를 저장할 수인 minVal를 선언한 뒤 가장 작을때의 값인 small을 대입한다.

4. 큰 수 big으로 minVal를 나누었을때, 나누어떨어진다면 minVal가 최소공배수인 것이므로 반복을 끝내고, 아니라면 small과 k를 곱해준 값을 minVal에 대입해주고 다시 반복을 진행한다. (이때, k는 1부터 1씩 증가시키면서 곱해주는 값이다.)

6. 반복이 끝났다면 minVal가 big으로 나누어떨어지는 small과 big의 최소공배수이므로 해당 수를 출력해준다.


<코멘트>

음... 이전 문제인 1934번 문제와 똑같이 풀었고, 문제에 나온대로 자료형을 long long으로 하니 바로 풀렸다!

두 수 중 작은값에 1부터 차례로 곱해가면서 큰 수로 해당 수를 나누었을 때, 나누어 떨어진다면 해당 수는 최소공배수가 되는 것을 이용하였다!


<제출결과>