Bibi's DevLog ๐Ÿค“๐ŸŽ

[Javascript] '์†Œ์ˆ˜ ์ฐพ๊ธฐ' ๋ฌธ์ œํ’€์ด ๋ณธ๋ฌธ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Javascript ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

[Javascript] '์†Œ์ˆ˜ ์ฐพ๊ธฐ' ๋ฌธ์ œํ’€์ด

๋น„๋น„ bibi 2020. 10. 11. 21:42

์˜ˆ์ œ ์›๋ณธ ๋งํฌ๋Š” ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค. (์ถœ์ฒ˜ : ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค)

programmers.co.kr/learn/courses/30/lessons/12921

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์†Œ์ˆ˜ ์ฐพ๊ธฐ

1๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž n ์‚ฌ์ด์— ์žˆ๋Š” ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”. ์†Œ์ˆ˜๋Š” 1๊ณผ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ๋งŒ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. (1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.) ์ œํ•œ ์กฐ๊ฑด n์€ 2์ด์ƒ

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

1๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž n ์‚ฌ์ด์— ์žˆ๋Š” ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”.

์†Œ์ˆ˜๋Š” 1๊ณผ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ๋งŒ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
(1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.)

์ œํ•œ ์กฐ๊ฑด

  • n์€ 2์ด์ƒ 1000000์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์ž…์ถœ๋ ฅ ์˜ˆ #1
1๋ถ€ํ„ฐ 10 ์‚ฌ์ด์˜ ์†Œ์ˆ˜๋Š” [2,3,5,7] 4๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ 4๋ฅผ ๋ฐ˜ํ™˜

์ž…์ถœ๋ ฅ ์˜ˆ #2
1๋ถ€ํ„ฐ 5 ์‚ฌ์ด์˜ ์†Œ์ˆ˜๋Š” [2,3,5] 3๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ 3๋ฅผ ๋ฐ˜ํ™˜

 


 

ํ˜„์žฌ ์ˆ˜๊ฐ•์ค‘์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž…๋ฌธ๊ฐ•์˜(์ธํ”„๋Ÿฐ) ์‹ค์Šต๋ฌธ์ œ์ฒ˜๋Ÿผ, ์ฝ˜์†” ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค.

์‚ฌ์‹ค ์•ž์˜ '๋ฌธ์ž์—ด์˜ ๊ฐ€์šด๋ฐ ๊ธ€์ž ๊ฐ€์ ธ์˜ค๊ธฐ'๋Š” ๊ธˆ๋ฐฉ ํ–ˆ๋Š”๋ฐ, ์ด ์†Œ์ˆ˜์ฐพ๊ธฐ ๋ฌธ์ œ๊ฐ€ ์ •๋ง ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.
๊ฑฐ์˜ ๋‹ค ๋œ ๋“ฏ ํ•œ๋ฐ.. ์˜ ์ƒํƒœ๋กœ ํ•˜๋ฃจ๋ฅผ ๋” ๊ณ ๋ฏผํ•˜๋‹ˆ ์ž˜ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
๋ฐ˜๋ณต๋ฌธ๋„ ์ค‘์ฒฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์กฐ๊ฑด๋ฌธ๋„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•ด์„œ ํ—ท๊ฐˆ๋ฆด ๋ฟ๋”๋Ÿฌ
ํ•จ์ˆ˜๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋…ผ๋ฆฌ๋ฅผ ๋” ๊ผผ๊ผผํ•˜๊ฒŒ ๋”ฐ์ ธ์•ผ ํ•ด์„œ ๋‚˜์—๊ฒ ํ›จ์”ฌ ์–ด๋ ค์šด ๋ฌธ์ œ์˜€๋‹ค.

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

(๊นƒํ—™ : github.com/bibi6666667/learningJavascript/commit/c9ab0cb251667a2c8694c50aad7279946b34882a)

html ํŒŒ์ผ๋กœ ์ €์žฅํ•œ ๋‹ค์Œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ’์ด ์ฝ˜์†” ์ฐฝ์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>์ฝ”์ฝ”์•„ ํ…Œ์ŠคํŠธ2</h2>
2 ์ด์ƒ 1000000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.<br>
1๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜ ์‚ฌ์ด์˜ ์†Œ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค. (์ฝ˜์†” ๋ฒ„์ „)<br>
์†Œ์ˆ˜ : 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47..<br>
<input type="text" id="input">
<button onclick="testlength()">์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜</button>
<script>
    function testlength() {
        var str = document.getElementById("input").value;
        var int = Number(str);
        // ์ˆซ์ž ์ฒดํฌ - ์ˆซ์ž๊ธธ์ด์ฒดํฌ - ์ž์—ฐ์ˆ˜์ฒดํฌ - testprime()์œผ๋กœ
        if (isNaN(int) === true) {
            console.log('๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.');
        } else if (int < 2 || int > 1000000) {
            console.log('2 ์ด์ƒ 1000000 ์ดํ•˜๋กœ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.');
        } else if (Number.isInteger(int) === false) {
            console.log('2 ์ด์ƒ 1000000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.')
        } else if (Number.isInteger(int) === true) {
            getnum(int);
        }
    }

    function getnum(int) {
        //1๊ณผ int์‚ฌ์ด ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ค๊ธฐ(num)
        var primenum = 0;
        for (var num = 2; num <= int; num++) {
            console.log('1๊ณผ' + int + '์‚ฌ์ด์—๋Š” ' + num + ' (์ด/๊ฐ€) ์žˆ๋‹ค');
            var remain0 = 0; //๋‚˜๋จธ์ง€0์ธ ์ธ์ˆ˜์˜ ๊ฐฏ์ˆ˜
            for (var i = 1; i <= num; i++) {
                if (num % i === 0) {
                    console.log(num + '์„' + i + '(์œผ)๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋‹ค');
                    remain0 += 1;
                    console.log('๋‚˜๋จธ์ง€๊ฐ€ 0์ธ ์ธ์ˆ˜๋Š”' + remain0 + '๊ฐœ');

                }
            }
            if (remain0 === 2) {
                console.log(num + '์€/๋Š” ์†Œ์ˆ˜')
                primenum += 1;
            }
        }
        console.log('๋”ฐ๋ผ์„œ, 1๊ณผ '+ int +' ์‚ฌ์ด์—๋Š”'+ primenum +'๊ฐœ์˜ ์†Œ์ˆ˜๊ฐ€ ์žˆ๋‹ค.');
    }

</script>

</body>
</html>
  • ํ•จ์ˆ˜ testlength()

์ˆซ์ž์ธ์ง€-2์ด์ƒ 1000000์ดํ•˜ ์ˆซ์ž์ธ์ง€-์ž์—ฐ์ˆ˜์ธ์ง€ ์ฒดํฌํ•˜๋Š” ํ•จ์ˆ˜.

document.getElementById(~).value;
์›น ๋ฌธ์„œ์—์„œ id ๊ฐ’์ด ~ ์ธ ๋Œ€์ƒ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.(str)

str.length;
str์˜ ๊ธธ์ด(๊ธ€์ž ์ˆ˜) ๋ฅผ ๊ตฌํ•œ๋‹ค.

isNaN()
is not a number์˜ ์•ฝ์ž.
() ์•ˆ์˜ ๊ฐ’์ด ์ˆซ์ž์ด๋ฉด false๋ฅผ, ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

  • ํ•จ์ˆ˜ getnum(int)

1๊ณผ int์‚ฌ์ด์˜ ์ž์—ฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ (์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ),
๊ทธ ์ˆ˜๋“ค์ด ๊ฐ๊ฐ ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„(๋‘ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ)ํ•ด ์ด ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜.

๋ณ€์ˆ˜ primenum(์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜)์„ ์„ ์–ธํ•˜๊ณ  0์„ ๋Œ€์ž…ํ•œ๋‹ค.

๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด 1๊ณผ int์‚ฌ์ด ์ž์—ฐ์ˆ˜๋“ค์„ ๋ชจ๋‘ ๊ตฌํ•œ๋‹ค. 1,2,3... int.
๊ฐ๊ฐ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ , ๊ทธ ์ž์—ฐ์ˆ˜๋“ค์ด ๋ชจ๋‘ ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•ด์•ผ ํ•˜๋ฏ€๋กœ
๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ๋ฐ˜๋ณต๋ฌธ์„ ์ค‘์ฒฉํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์†Œ์ˆ˜ = 1๊ณผ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ๋งŒ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆ˜.
์ฆ‰ ๋‚˜๋จธ์ง€๊ฐ€ 0(num % i === 0)์ธ ์ธ์ˆ˜๊ฐ€ 1๊ณผ ์ž๊ธฐ ์ž์‹ , 2๊ฐœ ๋ฟ์ธ ์ˆ˜.
(์˜ˆ๋ฅผ ๋“ค์–ด, 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47..์ด ์†Œ์ˆ˜์ด๋‹ค.)

์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ˆ˜๋Š” ๋‚˜๋จธ์ง€๊ฐ€ 0์ธ ์ธ์ˆ˜๊ฐ€ 3๊ฐœ ์ด์ƒ์ด๋‹ค.
๋‚˜๋Š” ๋‚˜๋จธ์ง€๊ฐ€ 0์ธ ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ณ€์ˆ˜ remain0=0์œผ๋กœ ์„ ์–ธํ•˜๊ณ ,
remain0์ด 2์ธ ์ˆ˜๋ฅผ ์†Œ์ˆ˜๋กœ ํŒ๋ณ„ํ•ด primenum์— 1์„ ๋”ํ–ˆ๋‹ค.

 

๋‚ด๊ฐ€ ํ—ค๋ฉ˜ ๋ถ€๋ถ„

1.

if (remain0 === 2) {
    console.log(num + '์€/๋Š” ์†Œ์ˆ˜')
    primenum += 1;
}

์ด ์ฝ”๋“œ์˜ ์œ„์น˜.
ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์–ด๋–ค ์ˆซ์ž์— ๋Œ€ํ•ด ๋‚˜๋จธ์ง€๊ฐ€ 0์ธ ์ธ์ˆ˜๊ฐ€ 2๊ฐœ๋ฟ์ด๋ฉด, ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜ ์นด์šดํŒ…์— 1์„ ๋”ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.
1๊ณผ int์‚ฌ์ด ๋ชจ๋“  ์ž์—ฐ์ˆ˜ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์†Œ์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ ๋’ค,
์†Œ์ˆ˜์ด๋ฉด primenum์— 1์„ ๋”ํ•˜๊ณ , ๋‹ค์‹œ ๊ทธ ๋‹ค์Œ ์ž์—ฐ์ˆ˜๊ฐ€ ์†Œ์ˆ˜์ธ์ง€ ํŒ๋‹จํ•ด์•ผ ํ•˜๋ฏ€๋กœ
ํ•ด๋‹น ์ฝ”๋“œ์˜ ์œ„์น˜๋Š” "์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ ์†, ๋‘ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋œ ๋’ค" ์ด๋‹ค.

2.

var primenum = 0; 

์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜ ๋ณ€์ˆ˜ ์„ ์–ธ์˜ ์œ„์น˜.
์•„๋ฌด๋ฆฌ ์†Œ์ˆ˜๋ฅผ ์ž˜ ํŒ๋‹จํ•ด์„œ ๊ตฌํ•ด ๋†”๋„ ์นด์šดํŒ…์ด ์•ˆ ๋˜๊ธธ๋ž˜ ์™œ ๊ทธ๋Ÿฌ๋‚˜ ํ–ˆ๋”๋‹ˆ,
๋ณ€์ˆ˜ ์„ ์–ธ์ด ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ์žˆ์—ˆ๋‹ค.
1๊ณผ int์‚ฌ์ด ์ž์—ฐ์ˆ˜ ๊ตฌํ•˜๊ณ , ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•  ๋•Œ๋งˆ๋‹ค primenum์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์žˆ๋˜ ๊ฒƒ.
(๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋‹น์—ฐํžˆ ์นด์šดํŒ…์ด ์•ˆ ๋œ๋‹ค.;;)
๊ทธ๋ž˜์„œ "getnum() ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ ์„ ์–ธ ์ „"์— ์œ„ ์ฝ”๋“œ๋ฅผ ๋„ฃ์œผ๋‹ˆ ์ž˜ ๋™์ž‘ํ–ˆ๋‹ค.

 

์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๊ฒƒ(๊ตฌ๊ธ€๋ง)

isInteger(n)
๊ด„ํ˜ธ ์•ˆ์˜ ์ˆซ์ž n์ด ์ •์ˆ˜์ธ์ง€ ํŒ๋‹จํ•ด ์ค€๋‹ค.
์ •์ˆ˜์ด๋ฉด true๋ฅผ, ์ •์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ž์—ฐ์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ด ์ฃผ์ง„ ์•Š๋Š”๋‹ค.
๊ทธ๋ž˜์„œ n์ด ์–‘์ˆ˜์ธ์ง€(n>0) ๋จผ์ € ํŒ๋‹จํ•œ ๋‹ค์Œ,
๊ฒฐ๊ณผ๊ฐ€ true์ผ ๋•Œ isInteger()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด n์ด ์ž์—ฐ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.