백준 문제풀이(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])과 나머지 링들의 최대공약수를 구하고 기약 분수 형태로 출력해주면 끝!

 

무엇이 어려웠는가?

어렸을 때 이런 문제들을 풀어본 적이 있는 것 같다. 문제를 읽고 바로 어떻게 풀지 모르면 이상할 만큼 문제는 간단했다.

최대공약수를 구하는 것도 쉽게 구현할 수 있었다.

딱히 어려운 것이 없는 문제였다.