알고리즘 모음(C++)

백준 3036 - 링(C++) 본문

백준

백준 3036 - 링(C++)

공대생의 잡다한 사전 2024. 2. 5. 22:37

문제 링크입니다. https://www.acmicpc.net/problem/3036

3036번: 링

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

www.acmicpc.net

유클리드 호제법을 이용한 문제입니다.

첫번째 링의 길이를 기준으로 다른 링들과의 최대 공약수를 구해줍니다. -> 이때 유클리ㄷ, 호제법이 이용됩니다.

최대 공약수를 구해줬다면, 값을 바탕으로 링이 도는 횟수를 출력해주면 됩니다.


자세한 것은 코드를 참고해주세요.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

int N;
int ring[101];

int Ucild(int x, int y){
	int num = x, div = y;
	while(1){
		if(div == 0) return num;
		int t = num;
		num = div;
		div = t % div;
	}
}

int main(){
	cin.tie(0);
	cout.tie(0);
	cin >> N;
	for(int i = 1; i <= N; i++){
		cin >> ring[i];
	}	
	for(int i = 2; i <= N; i++){
		int div = Ucild(ring[1], ring[i]);
		cout << ring[1] / div << "/" << ring[i]/div << "\n";
	}
	return 0;
}


질문 및 조언은 코드를 참고해주세요.