본문 바로가기
문제 풀이/백준(BOJ)

[C++] 백준 3036번 : 링

by 희조당 2021. 7. 3.
728x90

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

 

3036번: 링

출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.

www.acmicpc.net


 문제 풀이

기약 분수 형태로 출력하는 것만 신경 쓰면 되는 문제이다.

기약 분수로 만들기 위해서는 최대공약수로 나눠주면 된다!

결국 최대공약수를 구하는 문제이다!

 

 함수 Solution

첫 번째 원이 기준이니 2번째 원부터 따진다.

만약에 최대공약수가 없다면 있는 그대로 출력한다.

 느낀 점

유클리드 알고리즘만 알고 있다면 쉽게 해결할 문제이다!

 코드

#include <iostream>

using namespace std;

int n;
int radius[101];

int GCD(int a, int b) {
	if (b == 0) return a;
	else return GCD(b, a % b);
}

void solution() {
	for (int i = 1; i < n; i++) {
		int gcd = GCD(radius[0], radius[i]);
		if (gcd == 1) 
			cout << radius[0] << "/" << radius[i] << "\n";
		else
			cout << radius[0] / gcd << "/" << radius[i] / gcd << "\n";
	}
}

int main() {
	cin >> n;
	for (int i = 0; i < n;i++) 
		cin >> radius[i];
	solution();
}

댓글