๐Ÿ€ ์ดˆ๋ณด์ž ์นœํ™” ๊ฐ€์ด๋“œ 'Four Divisors' โ€“ LeetCode 1390 (C++, Python, JavaScript)

๋ฐœํ–‰: (2026๋…„ 1์›” 4์ผ ์˜คํ›„ 12:33 GMT+9)
4 min read
์›๋ฌธ: Dev.to

Source: Dev.to

๐Ÿ€ ์ดˆ๋ณด์ž ์นœํ™” ๊ฐ€์ด๋“œ 'Four Divisors' โ€“ LeetCode 1390 (C++, Python, JavaScript) ํ‘œ์ง€ ์ด๋ฏธ์ง€

๋ฌธ์ œ ์š”์•ฝ

์ž…๋ ฅ:

  • 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 ๋“ฑ)์ด๋‚˜ ๊ฒ€์ƒ‰ ์—”์ง„, ์บ์‹œ ์‹œ์Šคํ…œ ๋“ฑ ๋น ๋ฅธ ์ฟผ๋ฆฌ ์‘๋‹ต์ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ณด๋‹ค ์šฐ์„ ์‹œ๋˜๋Š” ๋ถ„์•ผ์—์„œ๋„ ํ•ต์‹ฌ์ ์œผ๋กœ ํ™œ์šฉ๋œ๋‹ค.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

๐ŸŽฏ ์ดˆ๋ณด์ž์šฉ ๊ฐ€์ด๋“œ 'N-Repeated Element in Size 2N Array' โ€“ LeetCode 961 (C++ | Python | JavaScript)

๋ฌธ์ œ ์„ค๋ช… ๊ธธ์ด๊ฐ€ 2N์ธ ๋ฐฐ์—ด nums๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋ฐฐ์—ด์—๋Š” N + 1๊ฐœ์˜ ๊ณ ์œ ํ•œ ์š”์†Œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ์š”์†Œ๊ฐ€ N๋ฒˆ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋ชฉํ‘œ...