[백준] 3036번 링 / C++

#문제

백준 3036번 링

#풀이

#include <iostream>

using namespace std;

int LCM(int x, int y)
{
	int a = x > y ? x : y;
	int b = x > y ? y : x;

	int r = a % b;

	while (r != 0)
	{
		a = b;
		b = r;
		r = a % b;
	}

	return b;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, x;
	cin >> n >> x;

	for (int i = 1; i < n; ++i)
	{
		int y;
		cin >> y;

		int lcm = LCM(x, y);

		cout << x / lcm << "/" << y / lcm << '\n';
	}

	return 0;
}

#정리

3보다 크거나 같고, 100보다 작거나 같은 n개의 링을 입력 받는다. 첫 번째 받은 링을 한 바퀴 돌리면 나머지 링이 몇 바퀴 도는지 기약 분수 형태로 A/B 형태를 출력하는 문제. 문제를 읽었을 땐, 바로 와닿지 않았지만, 입력 출력 예시를 보고 금방 이해했다. 첫 번째 받은 숫자와 두 번째 받은 숫자부터 각각 짝으로 최고공배수를 구해서 나눈 값을 출력하면 되겠다고 생각했다. n과 x를 먼저 받고, n - 1 만큼 숫자를 y로 받으면서, x와 y의 최소 공배수를 구하고 각각 최소 공배수로 나눈 값을 출력하여 해결.




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • [백준] 9613번 GCD 합 / C++
  • [백준] 1037번 최소공배수 / C++
  • [백준] 10816번 숫자 카드 2 / C++
  • [백준] 1934번 최소공배수 / C++
  • [백준] 1244번 스위치 켜고 끄기 / C++