πŸ’  Cpp/[BOJ] λ‹¨κ³„λ³„λ‘œ 풀어보기

[BOJ][C++] λ°±μ€€ 1735번: λΆ„μˆ˜ ν•© (Silver III)

선달 2025. 1. 14. 19:01
λ°˜μ‘ν˜•

문제

λΆ„μˆ˜ A/BλŠ” λΆ„μžκ°€ A, λΆ„λͺ¨κ°€ B인 λΆ„μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€. A와 BλŠ” λͺ¨λ‘ μžμ—°μˆ˜λΌκ³  ν•˜μž.
두 λΆ„μˆ˜μ˜ ν•© λ˜ν•œ λΆ„μˆ˜λ‘œ ν‘œν˜„ν•  수 μžˆλ‹€. 두 λΆ„μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, κ·Έ 합을 κΈ°μ•½λΆ„μˆ˜μ˜ ν˜•νƒœλ‘œ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. κΈ°μ•½λΆ„μˆ˜λž€ 더 이상 μ•½λΆ„λ˜μ§€ μ•ŠλŠ” λΆ„μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€.

μž…λ ₯

첫째 쀄과 λ‘˜μ§Έ 쀄에, 각 λΆ„μˆ˜μ˜ λΆ„μžμ™€ λΆ„λͺ¨λ₯Ό λœ»ν•˜λŠ” 두 개의 μžμ—°μˆ˜κ°€ μˆœμ„œλŒ€λ‘œ 주어진닀. μž…λ ₯λ˜λŠ” λ„€ μžμ—°μˆ˜λŠ” λͺ¨λ‘ 30,000 μ΄ν•˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 κ΅¬ν•˜κ³ μž ν•˜λŠ” κΈ°μ•½λΆ„μˆ˜μ˜ λΆ„μžμ™€ λΆ„λͺ¨λ₯Ό λœ»ν•˜λŠ” 두 개의 μžμ—°μˆ˜λ₯Ό 빈 칸을 사이에 두고 μˆœμ„œλŒ€λ‘œ 좜λ ₯ν•œλ‹€.

 

풀이

// 풀이 : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>
#include <set>

using namespace std;

// μ΅œλŒ€κ³΅μ•½μˆ˜
int getGcp(int a, int b) {
    return a==0 ? b : getGcp(b%a, a);
}

// μ΅œμ†Œκ³΅λ°°μˆ˜
int getLcm(int a, int b) {
    int gcp = getGcp(a, b);
    return a*b/gcp;
}

// μ•½λΆ„
void getReduced(int &ja, int &mo) {
    int gcp = getGcp(ja, mo);
    ja /= gcp;
    mo /= gcp;
}

int main() {
    ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	int a,b,c,d;
	cin >> a >> b >> c >> d;
	
    // (1) 각 λΆ„μˆ˜ μ•½λΆ„ν•˜κΈ°
	getReduced(a,b);
	getReduced(c,d);
	
    // (2) ν†΅λΆ„ν•˜κΈ°
	int lcm = getLcm(b,d);
	a *= lcm/b;
	c *= lcm/d;
	
    // (3) λ”ν•˜κΈ°
	int ja = a+c;
	int mo = lcm;
    
    // (4) λ”ν•΄μ„œ λ‚˜μ˜¨ λΆ„μˆ˜ μ•½λΆ„
	getReduced(ja, mo);
	
	cout << ja << " " << mo;
	
    return 0;
}
λ°˜μ‘ν˜•