728x90
0. 주어진 문제 |
링 성공
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 2367 | 1882 | 1729 | 81.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. 참고 |
'<백준> > |c++| easy' 카테고리의 다른 글
[c++] 백준 1094 - 막대기 (0) | 2019.04.17 |
---|---|
[c++] 백준 2455 - 지능형 기차 (0) | 2019.04.17 |
[c++] 백준 1850 - 최대공약수 (0) | 2019.04.16 |
[c++] 백준 2609 - 최대공약수와 최소공배수 (0) | 2019.04.16 |
[c++] 백준 13241 - 최소공배수 (0) | 2019.04.16 |