Boj

[Boj] 백준 C++ #3036 링

ima9ine4 2023. 12. 23. 21:16
728x90

문제

상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다. 
상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌아간다는 사실을 발견했다. 나머지 링은 첫 번째 링 보다 빠르게 돌아가기도 했고, 느리게 돌아가기도 했다. 이렇게 링을 돌리다 보니 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 도는지 궁금해졌다.
링의 반지름이 주어진다. 이때, 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 돌아가는지 구하는 프로그램을 작성하시오.

입력

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

출력

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


#include <iostream>
using namespace std;

int gcd(int a, int b){
    if(a<b){ //a에 더 큰 수가 위치하도록 swap
        int tmp = a;
        a = b; b = tmp;
    }
    int r = a % b;
    if(r==0){
        return b;
    }else{
        return gcd(b,r);
    }
}
int main() {
    int n; cin>>n;
    int mom, son, gcdResult;
    int first; cin>>first;
    for(int i=1;i<n;i++){
        int tmp; cin>>tmp;
        gcdResult = gcd(first, tmp); //분자와 분모의 최대공약수를 구함
        mom = first / gcdResult; // 분모를 최대공약수로 나누어 기약분수 형태를 만듦
        son = tmp / gcdResult; // 분자를 최대공약수로 나누어 기약분수 형태를 만듦
        cout << mom << "/" << son << endl;
    }
    return 0;
}

간단한 문제였다. 유클리드 알고리즘을 그대로 활용하는 문제는 익숙해진 것 같다!


 

[알고리즘] 유클리드 알고리즘(유클리드 호제법)

이산수학 보강 수업에서 유클리드 알고리즘에 대해 배웠다. 1학년 때부터 계속 배웠던건데 이번으로 3번째 정도 들으니까 좀 알겠더라.. 유클리드 알고리즘(유클리드 호제법)이란 2개의 자연수

ima9ine.tistory.com

 

3036번: 링

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

www.acmicpc.net

 

728x90
반응형

'Boj' 카테고리의 다른 글

[Boj] 백준 C++ #2981 검문  (0) 2024.01.10
[Boj] 백준 C++ #1991 트리 순회  (0) 2024.01.05
[Boj] 백준 C++ #13241 최소공배수  (1) 2023.12.28
[Boj] 백준 C++ #1735 분수 합  (1) 2023.12.22
[Boj] 백준 C++ #9613 GCD합  (2) 2023.12.22