별의 공부 블로그 🧑🏻‍💻
728x90
728x170

문제

대열이는 욱제의 친구다.

  • “야 백대열을 약분하면 뭔지 알아?”
  • “??”
  • “십대일이야~ 하하!”

n:m이 주어진다. 욱제를 도와주자. (...)



입력

n과 m이 :을 사이에 두고 주어진다. (1 <= n, m <= 100,000,000)

 

 

출력

두 수를 최대한으로 약분하여 출력한다.

 

 

예제 입력 1

 100:10

 

예제 출력 1

 10:1


 

예제 입력 2

 18:24

 

예제 출력 2

 3:4

 

 

출처

High School > 선린인터넷고등학교 > 2017 선린 봄맞이 교내대회 D번

· 문제를 만든 사람: wookje


 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <cstring>   // strtok()
#include <string>    // stoi()
 
#define N 100000000
 
int gcd(int m, int n);
 
using namespace std;
 
int main()
{
    char input[N];
    char* token;
    string num1, num2;
    int a, b, gcdn;
    
    cin >> input;
    
    token = strtok(input, ":");
    num1 = token;
    a = stoi(num1);
    
    token = strtok(NULL":");
    num2 = token;
    b = stoi(num2);
    
    gcdn = gcd(a, b);
    
    a = a / gcdn;
    b = b / gcdn;
    
    cout << a << ":" << b << endl
    
    return 0;
}
 
// 최대공약수
int gcd(int m, int n)
{
    if (m == 0return n;
    else return gcd(n % m, m);
}






이 문제는 strtok() 함수를 이용하여 풀었다. (문자열 분리)


우선 입력받은 문자열을 문자열 변수에 담고, strtok() 함수를 사용하여 문자 ":"을 기준으로 앞의 숫자와 뒤의 숫자를 분리하여 각각 다른 변수에 저장하였다.

그리고 stoi() 함수를 이용하여 분리한 숫자들의 자료형을 string 형식에서 int 형식으로 변환하였다.

두 수를 최대한 약분하여 출력하기 위해서는 두 수를 두 수의 최대공약수로 나누면 된다. 그래서 최대공약수를 구하는 gcd() 함수를 구현하여 이 문제를 해결하였다.


자료형의 형태를 꼼꼼히 신경써서 풀어야 했던 약간 까다로운 문제였다.



728x90
그리드형(광고전용)

'Problem Solving > BaekJoon Online Judge' 카테고리의 다른 글

[BOJ7568][C++] 덩치  (0) 2018.09.29
[BOJ1978][C++] 소수 찾기  (0) 2018.09.15
[BOJ12400][C++] Google語스  (0) 2018.09.08
[BOJ10174][C++] 팰린드롬  (0) 2018.09.08
[BOJ14495][C++] 피보나치 비스무리한 수열  (0) 2018.08.24
[BOJ15552][C++] 빠른 A+B  (1) 2018.08.18
[BOJ15953][C++] 상금 헌터  (0) 2018.08.15
[BOJ15964][C++] 이상한 기호  (0) 2018.08.15
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️


📖 Contents 📖