728x90

0. 주어진 문제 

시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초128 MB23671882172981.557%

문제

상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다. 

상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌아간다는 사실을 발견했다. 나머지 링은 첫 번째 링 보다 빠르게 돌아가기도 했고, 느리게 돌아가기도 했다. 이렇게 링을 돌리다 보니 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 도는지 궁금해졌다.

링의 반지름이 주어진다. 이때, 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 돌아가는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 링의 개수 N이 주어진다. (3 ≤ N ≤ 100)

다음 줄에는 링의 반지름이 상근이가 바닥에 놓은 순서대로 주어진다. 반지름은 1과 1000를 포함하는 사이의 자연수이다.

출력

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

예제 입력 1 

4
12 3 8 4

예제 출력 1 

4/1
3/2
3/1



 1. 풀이


링의 길이는 이므로 a를 한바퀴 돌릴때 b가 돌아가는 바퀴 수는 의 관계가 성립하게 된다.

이때, 우리가 신경을 써줘야하는 부분은 출력은 기약 분수 형태로 표현이 되어야한다는 것이다.

이걸 만족시키기 위해서는 a,b를 서로의 최대공약수로 나눠주면 된다.


 2. 소스코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
 
using namespace std;
 
int arr[100];
 
int gcd(int a, int b) {
    return a % b ? gcd(b, a%b) : b;
}
 
int main() {
    int T;
    cin >> T;
    cin >> arr[0];
    int temp;
    for (int i = 1; i < T; i++) {
        cin >> arr[i];
        temp = gcd(arr[0], arr[i]);
        cout << arr[0/ temp << "/" << arr[i] / temp << endl;
    }
}
cs


 3. 문제 출처


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


 4. 참고



+ Recent posts