백준 문제풀이(BOJ PS)
[백준(BOJ)] 3036번 링 C++
팜준
2022. 8. 2. 23:58
문제 : https://www.acmicpc.net/problem/3036
3036번: 링
출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.
www.acmicpc.net
어떤 문제인가?
아주 간단한 문제이다.
그냥 가장 큰 첫 번째 링의 반지름과 각 링들의 반지름들을 비교한 다음 기약 분수 형태로 출력하면 된다.
접근 방법
int n;
cin >> n;
링의 개수 n을 입력 받는다.
int arr[n];
링들의 반지름을 저장할 배열을 선언한다.
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
n번 만큼 링의 반지름을 입력받는다.
기약 분수로 나타내기 위해선 두 링 반지름의 최대공약수가 필요하다.
int gcd(int a, int b) {
int n;
while (b != 0) {
n = a % b;
a = b;
b = n;
}
return a;
}
두 수의 최대공약수를 구하는 함수이다.
for (int i = 1; i < n; i++) {
int div = gcd(arr[0], arr[i]);
cout << arr[0] / div << "/" << arr[i] / div << "\n";
}
첫 번째 링(arr [0])과 나머지 링들의 최대공약수를 구하고 기약 분수 형태로 출력해주면 끝!
무엇이 어려웠는가?
어렸을 때 이런 문제들을 풀어본 적이 있는 것 같다. 문제를 읽고 바로 어떻게 풀지 모르면 이상할 만큼 문제는 간단했다.
최대공약수를 구하는 것도 쉽게 구현할 수 있었다.
딱히 어려운 것이 없는 문제였다.