From 5ea7349d4248ac90a5c0293fe8e294277a5ed51a Mon Sep 17 00:00:00 2001 From: minjae9610 Date: Sat, 5 Aug 2023 23:33:51 +0900 Subject: [PATCH 1/3] [cpp] boj2014 --- .../BoJ/Gold I/boj2014/README.md | 69 +++++++++++++++++++ .../BoJ/Gold I/boj2014/boj2014.cpp | 52 ++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md create mode 100644 seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp 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..766d16d --- /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) +{ + long long 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, ½Ã°£: 16 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..64cf968 --- /dev/null +++ b/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp @@ -0,0 +1,52 @@ +#include +#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) + { + long long 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; +} From 0828d713f9c48f2fe8a11a29487b199e6d11bd29 Mon Sep 17 00:00:00 2001 From: minjae9610 Date: Sun, 6 Aug 2023 11:02:29 +0900 Subject: [PATCH 2/3] [fix] remove unused library --- seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md | 2 +- seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md b/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md index 766d16d..459de52 100644 --- a/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md +++ b/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md @@ -64,6 +64,6 @@ for (int i = 1; i < n + 1; ++i) ## ¼º´É ¿ä¾à -¸Þ¸ð¸®: 2292 KB, ½Ã°£: 16 ms +¸Þ¸ð¸®: 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 index 64cf968..3b9b119 100644 --- a/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp +++ b/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp @@ -1,4 +1,3 @@ -#include #include #include From 3cb81bb878d118bdfed93693cd444546d1dba8c0 Mon Sep 17 00:00:00 2001 From: minjae9610 Date: Sun, 6 Aug 2023 11:10:45 +0900 Subject: [PATCH 3/3] [fix] change unnecessary variable type long long to int --- seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md | 2 +- seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md b/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md index 459de52..c782bea 100644 --- a/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md +++ b/seoul_21_minjaekim/BoJ/Gold I/boj2014/README.md @@ -38,7 +38,7 @@ int ugly_numbers[100001] = { 1 }; ```cpp for (int i = 1; i < n + 1; ++i) { - long long min_number = numeric_limits::max(); + int min_number = numeric_limits::max(); int min_index[100]; int min_count = 0; for (int j = 0; j < k; ++j) diff --git a/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp b/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp index 3b9b119..8f3edd4 100644 --- a/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp +++ b/seoul_21_minjaekim/BoJ/Gold I/boj2014/boj2014.cpp @@ -22,7 +22,7 @@ int main() for (int i = 1; i < n + 1; ++i) { - long long min_number = numeric_limits::max(); + int min_number = numeric_limits::max(); int min_index[100]; int min_count = 0; for (int j = 0; j < k; ++j)