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 == 0) return 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 |