Algorithm/λ¬Έμ œν’€μ΄

[λ°±μ€€] 13241번 - μ΅œμ†Œκ³΅λ°°μˆ˜ (C++)

moaoh 2023. 8. 8. 23:37

 

13241번: μ΅œμ†Œκ³΅λ°°μˆ˜

μ •μˆ˜ B에 0보닀 큰 μ •μˆ˜μΈ N을 κ³±ν•΄ μ •μˆ˜ Aλ₯Ό λ§Œλ“€ μˆ˜ μžˆλ‹€λ©΄, AλŠ” B의 λ°°μˆ˜μ΄λ‹€. 예: 10은 5의 λ°°μˆ˜μ΄λ‹€ (5*2 = 10) 10은 10의 λ°°μˆ˜μ΄λ‹€(10*1 = 10) 6은 1의 λ°°μˆ˜μ΄λ‹€(1*6 = 6) 20은 1, 2, 4,5,10,20의 λ°°μˆ˜μ΄λ‹€. λ‹€

www.acmicpc.net

문제

μ •μˆ˜ B에 0보닀 큰 μ •μˆ˜μΈ N을 κ³±ν•΄ μ •μˆ˜ Aλ₯Ό λ§Œλ“€ μˆ˜ μžˆλ‹€λ©΄, AλŠ” B의 λ°°μˆ˜μ΄λ‹€.

예:

  • 10은 5의 λ°°μˆ˜μ΄λ‹€ (5*2 = 10)
  • 10은 10의 λ°°μˆ˜μ΄λ‹€(10*1 = 10)
  • 6은 1의 λ°°μˆ˜μ΄λ‹€(1*6 = 6)
  • 20은 1, 2, 4,5,10,20의 λ°°μˆ˜μ΄λ‹€.

λ‹€λ₯Έ 예:

  • 2와 5의 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 10이고, κ·Έ μ΄μœ λŠ” 2와 5보닀 μž‘μ€ κ³΅λ°°μˆ˜κ°€ μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.
  • 10κ³Ό 20의 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 20이닀.
  • 5와 3의 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 15이닀.

당신은 두 μˆ˜μ— λŒ€ν•˜μ—¬ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„± ν•˜λŠ” κ²ƒμ΄ λͺ©ν‘œμ΄λ‹€.

 

 

μž…λ ₯

ν•œ 쀄에 두 μ •μˆ˜ A와 Bκ°€ 곡백으둜 λΆ„λ¦¬λ˜μ–΄ μ£Όμ–΄μ§„λ‹€.

50%의 μž…λ ₯ 쀑 A와 BλŠ” 1000(103)보닀 μž‘λ‹€. λ‹€λ₯Έ 50%의 μž…λ ₯은 1000보닀 크고 100000000(108)보닀 μž‘λ‹€.

μΆ”κ°€: 큰 수 μž…λ ₯에 λŒ€ν•˜μ—¬ λ³€μˆ˜λ₯Ό 64λΉ„νŠΈ μ •μˆ˜λ‘œ μ„ μ–Έν•˜μ‹œμ˜€. C/C++μ—μ„œλŠ” long long intλ₯Ό μ‚¬μš©ν•˜κ³ , Javaμ—μ„œλŠ” long을 μ‚¬μš©ν•˜μ‹œμ˜€.

 

 

좜λ ₯

A와 B의 μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό ν•œ 쀄에 좜λ ₯ν•œλ‹€.

 

풀이과정

이 λ¬Έμ œλŠ” a와 b의 μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•΄μ•Όν•˜λŠ” λ¬Έμ œμ˜€μ—ˆλ‹€.

μ΅œμ†Œκ³΅λ°°μˆ˜μ˜ 경우

μ΅œμ†Œκ³΅λ°°μˆ˜ = a * b / μ΅œλŒ€κ³΅μ•½μˆ˜

λΌλŠ” μ‹μœΌλ‘œ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό ꡬ할 수 μžˆμœΌλ―€λ‘œ μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜μ—¬ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•˜λ©΄ λ˜λŠ” λ¬Έμ œμ˜€μ—ˆλ‹€.

μ΅œλŒ€κ³΅μ•½μˆ˜μ˜ κ²½μš°μ—λŠ” μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μ΄λΌλŠ” 과정을 ν†΅ν•΄μ„œ ꡬ할 수 μžˆλŠ”λ° κ·Έ 과정은 μ•„λž˜μ™€ κ°™λ‹€.

μ•„λž˜μ™€ 같은 연산을 ν†΅ν•΄μ„œ 유클리트 ν˜Έμ œλ²•μœΌλ‘œ μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό ꡬ할 수 μžˆμ—ˆκ³ ,

μ΅œμ†Œ κ³΅λ°°μˆ˜λŠ” a * b / μ΅œλŒ€κ³΅μ•½μˆ˜μ΄λ―€λ‘œ μœ„μ™€ 같은 λ°©μ‹μœΌλ‘œ 값을 ꡬ할 수 μžˆμ—ˆλ‹€.

즉 μœ„μ™€ 같은 μ˜ˆμ œμ— κ²½μš°μ—λŠ” 36κ³Ό 64의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” 4이고 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” (36 * 64 / 4 = 576 ) 576μž„μ„ μ•Œ 수 μžˆλ‹€.

code

#include <iostream>

long long gcd(long long a, long long b)
{
	long long c;
	while(b)
	{
		c = a % b;
		a = b;
		b = c;
	}
	return a;
}

int		main()
{
	long long a, b;

	std::cin >> a >> b;
	std::cout << (a * b / gcd(a, b));

	return (0);
}

 

ν›„κΈ°

μˆ˜ν•™μˆ˜ν•™ μˆ˜ν•™λ¬Έμ œ