Koala - 14기/코딩테스트 준비 스터디

[백준/C++] 14490번 백대열

nunomi0 2024. 5. 6. 01:23

https://www.acmicpc.net/problem/14490

문제

n, m이 :을 사이에 두고 주어질 때 두 수를 최대한으로 약분해서 출력한다. (1<=n,m<=100,000,000)

 

풀이

두 수의 최대 공약수 x를 구하여 n/x : m/x를 출력한다.

 

코드

#include <iostream>
#include <vector>
#include <string>
using namespace std;

string s;
int n, m, x = 1;
vector<int> v;
//최대공약수로 나누기

int main() {
	cin >> s;
	for (int i = 0; i < s.length();i++) {
		if (s[i] == ':') {
			n = stoi(s.substr(0, i));
			m = stoi(s.substr(i + 1, s.length() - i));
		}
	}
	for (int i = 2; i <= n; i++) {
		if (n % i == 0) v.push_back(i);
	}
	for (int i = 2; i <= m; i++) {
		if (m % i == 0) {
			for (int j = 0; j < v.size(); j++) {
				if (i == v[j]) x = i;
			}
		}
	}

	cout << n / x << ':' << m / x;
}