diff --git "a/Programmers/Level1/12921_\354\206\214\354\210\230_\354\260\276\352\270\260.js" "b/Programmers/Level1/12921_\354\206\214\354\210\230_\354\260\276\352\270\260.js" new file mode 100644 index 0000000..1124a5c --- /dev/null +++ "b/Programmers/Level1/12921_\354\206\214\354\210\230_\354\260\276\352\270\260.js" @@ -0,0 +1,30 @@ +/* +⭐️ 문제 정보 ⭐️ +문제 : 12921 - 소수 찾기 +레벨 : Level 1 +링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12921 +*/ + +// ANCHOR - 2026.01.23 풀이 +/** + * NOTE + * 에라토스테네스의 체 + */ +function countPrime(n) { + const isPrime = Array.from({length: n + 1}).fill(true); + isPrime[0] = false; + isPrime[1] = false; + + for (let num = 2; num * num <= n; num++) { + if (isPrime[num] === false) continue; + for (let k = num * num; k <= n; k += num) { + isPrime[k] = false; + } + } + + return isPrime.filter((value) => value).length; +} + +function solution(n) { + return countPrime(n); +} diff --git "a/Programmers/Level1/12977_\354\206\214\354\210\230_\353\247\214\353\223\244\352\270\260.js" "b/Programmers/Level1/12977_\354\206\214\354\210\230_\353\247\214\353\223\244\352\270\260.js" new file mode 100644 index 0000000..ea4b704 --- /dev/null +++ "b/Programmers/Level1/12977_\354\206\214\354\210\230_\353\247\214\353\223\244\352\270\260.js" @@ -0,0 +1,41 @@ +/* +⭐️ 문제 정보 ⭐️ +문제 : 12977 - 소수 만들기 +레벨 : Level 1 +링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12977 +*/ + +// ANCHOR - 2026.01.23 풀이 +/** + * NOTE + * 조합으로 3개씩 뽑아서 소수인지 확인 + * (combinations 함수를 구현하는 것 보다 삼중 for문을 돌리는 것이 더 효율적이다. (공간복잡도 측면에서)) + */ +function eratosthenes(n) { + const isPrime = Array.from({ length: n + 1 }).fill(true); + isPrime[0] = false; + isPrime[1] = false; + for (let num = 2; num * num <= n; num++) { + if (isPrime[num] === false) continue; + for (let k = num * num; k <= n; k += num) { + isPrime[k] = false; + } + } + + return isPrime; +} + +function solution(nums) { + let answer = 0; + const isPrime = eratosthenes(2997); // 주어진 숫자 3개를 더했을 때 나올 수 있는 최댓값이 2997 (1000+999+998) + + for (let a = 0; a < nums.length - 2; a++) { + for (let b = a + 1; b < nums.length - 1; b++) { + for (let c = b + 1; c < nums.length; c++) { + if (isPrime[nums[a] + nums[b] + nums[c]]) answer++; + } + } + } + + return answer; +} diff --git a/Programmers/README.md b/Programmers/README.md index 51ec3c4..561cf01 100644 --- a/Programmers/README.md +++ b/Programmers/README.md @@ -12,14 +12,16 @@ | 12906 | 같은 숫자는 싫어 | [12906_같은_숫자는_싫어.js](Level1/12906_같은_숫자는_싫어.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12906) | | 12909 | 올바른 괄호 | [12909_올바른_괄호.js](Level2/12909_올바른_괄호.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12909) | | 12910 | 나누어 떨어지는 숫자 배열 | [12910_나누어_떨어지는_숫자_배열.js](Level1/12910_나누어_떨어지는_숫자_배열.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12910) | +| 12921 | 소수 찾기 | [12921_소수_찾기.js](Level1/12921_소수_찾기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12921) | | 12924 | 숫자의 표현 | [12924_숫자의_표현.js](Level2/12924_숫자의_표현.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12924) | | 12928 | 약수의 합 | [12928_약수의_합.js](Level1/12928_약수의_합.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12928) | | 12939 | 최댓값과 최솟값 | [12939_최댓값과_최솟값.js](Level2/12939_최댓값과_최솟값.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12939) | | 12940 | 최대공약수와 최소공배수 | [12940_최대공약수와_최소공배수.js](Level1/12940_최대공약수와_최소공배수.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12940) | | 12941 | 최솟값 만들기 | [12941_최솟값_만들기.js](Level2/12941_최솟값_만들기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12941) | | 12949 | 행렬의 곱셈 | [12949_행렬의_곱셈.js](Level2/12949_행렬의_곱셈.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12949) | -| 12953 | N개의 최소공배수 | [12953_N개의_최소공배수.js](12953_N개의_최소공배수.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12953) | +| 12953 | N개의 최소공배수 | [12953_N개의_최소공배수.js](Level1/12953_N개의_최소공배수.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12953) | | 12973 | 짝지어 제거하기 | [12973_짝지어_제거하기.js](Level2/12973_짝지어_제거하기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12973) | +| 12977 | 소수 만들기 | [12977_소수_만들기.js](Level1/12977_소수_만들기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12977) | | 12981 | 영어 끝말잇기 | [12981_영어_끝말잇기.js](Level2/12981_영어_끝말잇기.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12981) | | 12985 | 예상 대진표 | [12985_예상_대진표.js](Level2/12985_예상_대진표.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12985) | | 12987 | 숫자 게임 | [12987_숫자_게임.js](Level3/12987_숫자_게임.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/12987) |