반응형
문제
상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다.
상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌아간다는 사실을 발견했다. 나머지 링은 첫 번째 링 보다 빠르게 돌아가기도 했고, 느리게 돌아가기도 했다. 이렇게 링을 돌리다 보니 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 도는지 궁금해졌다.
링의 반지름이 주어진다. 이때, 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 돌아가는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 링의 개수 N이 주어진다. (3 ≤ N ≤ 100)
다음 줄에는 링의 반지름이 상근이가 바닥에 놓은 순서대로 주어진다. 반지름은 1과 1000를 포함하는 사이의 자연수이다.
출력
출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.
유클리드 호제법
a와 b의 최대공약수를 구하는 로직
a 78696 b 19332일 때
b를 a에 넘기고
a % b를 b에 넘기면서
b가 0이 될 때까지 반복했을 때 나오는 a가 최대공약수
78696 = 19332×4 + 1368
19332 = 1368×14 + 180
1368 = 180×7 + 108
180 = 108×1 + 72
108 = 72×1 + 36
72 = 36×2
#include <iostream>
#include <vector>
#include<queue>
#include <string>
#include <map>
#include<algorithm>
using namespace std;
int arr[100];
int gcd(int a, int b)
{
int c;
while (b)
{
c = a % b;
a = b;
b = c;
}
return a;
}
int main() {
int N;
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> arr[i];
}
for (int i = 1; i < N; i++)
{
int g = gcd(arr[0], arr[i]);
cout << arr[0] / g << "/" << arr[i] / g << endl;
}
}
반응형
'Algorithm' 카테고리의 다른 글
[수학 3 단계] 백준 11051번 이항 계수 2 oo (0) | 2020.09.29 |
---|---|
[수학 3 단계] 백준 11050번 이항 계수 1 (0) | 2020.09.29 |
[수학 3 단계] 백준 2609번 최대공약수와 최소공배수 (0) | 2020.09.29 |
[수학 3 단계] 백준 11653번 소인수분해 (0) | 2020.09.29 |
[수학 3 단계] 백준 1037번 약수 (0) | 2020.09.29 |