Bibi's DevLog ๐ค๐
[Javascript] '์์ ์ฐพ๊ธฐ' ๋ฌธ์ ํ์ด ๋ณธ๋ฌธ
[Javascript] '์์ ์ฐพ๊ธฐ' ๋ฌธ์ ํ์ด
๋น๋น bibi 2020. 10. 11. 21:42์์ ์๋ณธ ๋งํฌ๋ ์๋์ ์์ต๋๋ค. (์ถ์ฒ : ํ๋ก๊ทธ๋๋จธ์ค)
programmers.co.kr/learn/courses/30/lessons/12921
๋ฌธ์ ์ค๋ช
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์ด ์์ฐ์์ธ์ง ํ๋ณํ ์ ์๋ค.