[ ALGORITHM ]/[ 백 준 ]

[BAEKJOON] 3036번 링

HiStar__ 2020. 7. 14. 13:28

문 제

 

소 스  코 드

#include <iostream>

const int GCD(int, int);

// 원의 둘레 : r * 2 * pi
int main() {
	int N;
	std::cin >> N;

	int * circles{ new int[N] };

	for (int i = 0; i < N; ++i) std::cin >> circles[i];

	for (int i = 1; i < N; ++i) {
		int temp{ GCD(circles[0], circles[i]) };
		std::cout << circles[0] / temp << '/' << circles[i] / temp << '\n';
	}

	delete[] circles;
	return 0;
}

const int GCD(int a, int b) {
	while (b != 0) {
		int r = a % b;
		a = b;
		b = r;
	}
	return a;
}

 

풀 이

 

  • { 12 3 8 4 }

    첫번째 원의 둘레는 12 * 2 * pi

    두번째 원의 둘레는 3 * 2 * pi

    첫번째 원이 한바퀴 돌 경우 12 * 2 * pi = 3 * 2 * pi * m 

    12 / 3 = m 이 된다.

    이때 12 / 3의 최대공약수를 구한다면, 4 / 1의 결과가 나오게 된다.

    두 수의 최대공약수를 구하는 공식, 유클리드 호제법을 통하여 나눈다면 알맞은 결과가 나온다.

 

출 력 값

 

 

문 제  출 처

문제 링크 : [ BAEKJOON ] : https://www.acmicpc.net/problem/3036

 

3036번: 링

문제 상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다.  상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌�

www.acmicpc.net