diff --git a/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md b/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md new file mode 100644 index 0000000..c782bea --- /dev/null +++ b/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md @@ -0,0 +1,69 @@ +# [BoJ 2014 ¼Ò¼öÀÇ °ö](https://www.acmicpc.net/problem/2014) + +## Ä«Å×°í¸® + +¼öÇÐ, ÀÚ·á ±¸Á¶, Á¤¼ö·Ð, ¿ì¼±¼øÀ§ Å¥ + +## ½Ã°£º¹Àâµµ + +O(n * k) + +## Çؼ³ + +ÀԷ¹ÞÀº `k`°³ÀÇ ¼Ò¼ö¿Í ±× ¼Ò¼ö°¡ °¡¸£Å°´Â À妽º¸¦ ÀúÀåÇÏ´Â `prime_numbers` ¹è¿­À» ¼±¾ðÇÑ´Ù. + +```cpp + +```cpp +int k, n; +cin >> k >> n; + +pair prime_numbers[100]; +for (int i = 0; i < k; ++i) { + cin >> prime_numbers[i].first; + prime_numbers[i].second = 0; +} +``` + +¼Ò¼öÀÇ °ö(`ugly number`)À» ÀúÀåÇÏ´Â ¹è¿­À» ¼±¾ðÇÑ´Ù. +¼Ò¼ö¸¦ °öÇØ°¡±â ½ÃÀÛÇÒ ¼ýÀÚ°¡ ÇÊ¿äÇϱ⠶§¹®¿¡ 1À» Çϳª ³Ö¾îÁØ´Ù. + +```cpp +int ugly_numbers[100001] = { 1 }; +``` + +°¢ ¼Ò¼öº° Æ÷ÀÎÅ͸¦ °¡¸£Å°´Â `prime_numbers` ¹è¿­À» ÀÌ¿ëÇØ ugly number¸¦ ±¸ÇÏ°í, ±× Áß ÃÖ¼Ò°ªÀ» `ugly_numbers` ¹è¿­¿¡ ³Ö´Â´Ù. +±× ÈÄ ÇØ´ç `ugly number`¸¦ ¸¸µé ¼ö ÀÖ´Â ¼Ò¼öµéÀÇ Æ÷ÀÎÅ͸¦ Áõ°¡½ÃŲ´Ù. + +```cpp +for (int i = 1; i < n + 1; ++i) +{ + int min_number = numeric_limits::max(); + int min_index[100]; + int min_count = 0; + for (int j = 0; j < k; ++j) + { + int next_number = prime_numbers[j].first * ugly_numbers[prime_numbers[j].second]; + if (next_number < min_number) + { + min_number = prime_numbers[j].first * ugly_numbers[prime_numbers[j].second]; + min_index[0] = j; + min_count = 1; + } + else if (next_number == min_number) + { + min_index[min_count] = j; + ++min_count; + } + } + ugly_numbers[i] = min_number; + for (int j = 0; j < min_count; ++j) + ++prime_numbers[min_index[j]].second; +} +``` + +## ¼º´É ¿ä¾à + +¸Þ¸ð¸®: 2292 KB, ½Ã°£: 12 ms + +°á°ú : [¸Â¾Ò½À´Ï´Ù!!](http://boj.kr/ce23d5163b5948499f4ff2d1031287b9) \ No newline at end of file diff --git a/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp b/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp new file mode 100644 index 0000000..8f3edd4 --- /dev/null +++ b/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp @@ -0,0 +1,51 @@ +#include +#include + +using namespace std; + +int main() +{ + ios_base::sync_with_stdio(false); + cin.tie(nullptr); + cout.tie(nullptr); + + + int k, n; + cin >> k >> n; + + pair prime_numbers[100]; + for (int i = 0; i < k; ++i) { + cin >> prime_numbers[i].first; + prime_numbers[i].second = 0; + } + int ugly_numbers[100001] = { 1 }; + + for (int i = 1; i < n + 1; ++i) + { + int min_number = numeric_limits::max(); + int min_index[100]; + int min_count = 0; + for (int j = 0; j < k; ++j) + { + int next_number = prime_numbers[j].first * ugly_numbers[prime_numbers[j].second]; + if (next_number < min_number) + { + min_number = prime_numbers[j].first * ugly_numbers[prime_numbers[j].second]; + min_index[0] = j; + min_count = 1; + } + else if (next_number == min_number) + { + min_index[min_count] = j; + ++min_count; + } + } + ugly_numbers[i] = min_number; + for (int j = 0; j < min_count; ++j) + ++prime_numbers[min_index[j]].second; + } + + cout << ugly_numbers[n] << endl; + + return 0; +}