๐ ์ด๋ณด์ ์นํ ๊ฐ์ด๋ 'Four Divisors' โ LeetCode 1390 (C++, Python, JavaScript)
Source: Dev.to

๋ฌธ์ ์์ฝ
์ ๋ ฅ:
nums๋ผ๋ ์ ์ ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค.
๋ชฉํ:
- ๋ฐฐ์ด์์ ์ ํํ ๋ค ๊ฐ์ ์ฝ์๋ฅผ ๊ฐ์ง ๋ชจ๋ ์๋ฅผ ์ฐพ๋๋ค.
- ํด๋น ์๋ค์ ๋ชจ๋ ์ฝ์์ ํฉ์ ๊ณ์ฐํ์ฌ ์ ์ฒด ํฉ์ ๋ฐํํ๋ค.
์ง๊ด
์ฝ์๋ ์ด๋ค ์๋ฅผ ๋๋์ด ๋จ์ด์ง๊ฒ ํ๋ ์์ด๋ค. ์๋ฅผ ๋ค์ด 6์ ์ฝ์๋ 1,โฏ2,โฏ3,โฏ6์ด๋ค.
ํด๋ฒ์ ์ฌ์ ๊ณ์ฐ(precomputation) ์ ์ด์ฉํ๋ค: ์ต๋ ์ ํ๊ฐ(100โฏ000)๊น์ง์ ๋ชจ๋ ์์ ๋ํด ์ฝ์ ๊ฐ์์ ์ฝ์ ํฉ์ ํ ๋ฒ ๊ณ์ฐํด ๋๊ณ , ์ดํ ๊ฐ ์์์ ๋ํด O(1) ์๊ฐ์ ๋ต์ ์ป๋๋ค.
์ฒด(Sieve) ์ ๊ทผ๋ฒ
- ์ธ๋ถ ๋ฃจํ(
i) โ ๊ฐ๋ฅํ ์ฝ์๋ฅผ ์ํํ๋ค. - ๋ด๋ถ ๋ฃจํ(
j) โi์ ๋ชจ๋ ๋ฐฐ์๋ฅผ ์ํํ๋ค.i๊ฐj๋ฅผ ๋๋๋ฏ๋กj์ ์ฝ์ ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ ,i๋ฅผj์ ์ฝ์ ํฉ์ ๋ํ๋ค.
์ด ํ๋ค์ ๋ง๋ ๋ค, ์ด๋ค ์๊ฐ ์ ํํ ๋ค ๊ฐ์ ์ฝ์๋ฅผ ๊ฐ๋์ง ํ์ธํ๊ณ ๊ทธ ์ฝ์ ํฉ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋จ์ํ ๋ฐฐ์ด์ ์กฐํํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์ฝ๋ ๋ธ๋ก
C++
#include
using namespace std;
constexpr int MX = 100001;
int divisor_num[MX];
int divisor_sum[MX];
// Precompute divisor counts and sums for all numbers up to 100,000
int init = [] {
for (int i = 1; i & nums) {
int ans = 0;
for (int x : nums) {
if (x int:
total_ans = 0
for x in nums:
if divisor_num[x] == 4:
total_ans += divisor_sum[x]
return total_ans
JavaScript
const MX = 100001;
const divisor_num = new Int32Array(MX);
const divisor_sum = new Int32Array(MX);
// Precompute using a selfโinvoking function
(function() {
for (let i = 1; i < MX; i++) {
for (let j = i; j < MX; j += i) {
divisor_num[j]++;
divisor_sum[j] += i;
}
}
})();
/**
* @param {number[]} nums
* @return {number}
*/
var sumFourDivisors = function(nums) {
let totalAns = 0;
for (let x of nums) {
if (divisor_num[x] === 4) {
totalAns += divisor_sum[x];
}
}
return totalAns;
};
ํต์ฌ ์ ๋ฆฌ
- ์ฌ์ ๊ณ์ฐ: ๊ณ ์ ๋ ๋ฒ์์ ๋ํด ์ฌ๋ฌ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ๋ ๋ฏธ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํด ๋๋ฉด ์คํ ์๊ฐ์ด ํฌ๊ฒ ๋จ์ถ๋๋ค.
- ์ฒด ํจํด: โ๋ชจ๋ ์๋ฅผ ์ง์ ๊ฒ์ฌโํ๋ ๋ฐฉ์์์ โ๋ชจ๋ ๋ฐฐ์๋ฅผ ํ์โํ๋ ๋ฐฉ์์ผ๋ก ์ ํํ๋ฉด ๋ณต์ก๋๊ฐ O(NยทโN)์์ ๋๋ต O(NโฏlogโฏN)์ผ๋ก ๊ฐ์ํ๋ค.
- ๊ณต๊ฐโ์๊ฐ ํธ๋ ์ด๋์คํ: ์ฝ 10๋ง ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฌ์ฉํ๋ฉด ์ ๋ ฅ ๋ฐฐ์ด์ ์ฒ๋ฆฌํ๋ ์๋๊ฐ ํฌ๊ฒ ํฅ์๋๋ค.
๋ง๋ฌด๋ฆฌ ์๊ฐ
์ด ๋ฌธ์ ๋ ์ฒด ๊ธฐ๋ฐ ์ฌ์ ๊ณ์ฐ๊ณผ ๊ฐ์ ์๋ก ๊ธฐ๋ฒ์ด ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง๋ฅผ ๋ณด์ฌ์ค๋ค. ๋น์ทํ ์์ด๋์ด๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ(RSA ๋ฑ)์ด๋ ๊ฒ์ ์์ง, ์บ์ ์์คํ ๋ฑ ๋น ๋ฅธ ์ฟผ๋ฆฌ ์๋ต์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ณด๋ค ์ฐ์ ์๋๋ ๋ถ์ผ์์๋ ํต์ฌ์ ์ผ๋ก ํ์ฉ๋๋ค.