From c06809b8a112c46f68ef66c2b1a619b4e42363bc Mon Sep 17 00:00:00 2001 From: raejun92 Date: Sun, 19 Apr 2026 22:27:25 +0900 Subject: [PATCH] =?UTF-8?q?feat(raejun):=20add=20=EB=8B=A4=EC=9D=8C?= =?UTF-8?q?=ED=81=B0=EC=88=AB=EC=9E=90,=20=EC=88=AB=EC=9E=90=EC=9D=98?= =?UTF-8?q?=ED=91=9C=ED=98=84=20solutions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...14\355\201\260\354\210\253\354\236\220.js" | 33 ++++++++++++++++ ...20\354\235\230\355\221\234\355\230\204.js" | 38 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 "raejun/\353\213\244\354\235\214\355\201\260\354\210\253\354\236\220.js" create mode 100644 "raejun/\354\210\253\354\236\220\354\235\230\355\221\234\355\230\204.js" diff --git "a/raejun/\353\213\244\354\235\214\355\201\260\354\210\253\354\236\220.js" "b/raejun/\353\213\244\354\235\214\355\201\260\354\210\253\354\236\220.js" new file mode 100644 index 0000000..5b48c19 --- /dev/null +++ "b/raejun/\353\213\244\354\235\214\355\201\260\354\210\253\354\236\220.js" @@ -0,0 +1,33 @@ +function solution(n) { + var answer = 0; + + const findOneCount = (number) => { + return number + .toString(2) + .split("") + .filter((n) => n === "1").length; + }; + + const nCount = findOneCount(n); + + let findNum = n + 1; + + while (42) { + if (findOneCount(findNum) === nCount) return findNum; + + findNum++; + } +} + +/* +풀이 시간: 31분 + +시간 복잡도는 O(n log n)이다. +공간 복잡도는 O(1)이다. + +n의 1의 개수를 구하는 findOneCount 함수를 정의했다. +그 다음에, n보다 큰 수를 하나씩 증가시키면서, findOneCount 함수로 1의 개수를 구해서, n의 1의 개수와 비교했다. +만약 두 개수가 같으면, 그 수를 반환했다. + +처음에는 n의 이진수를 구해서 이진수를 가지고 구해보려고 했는데, 깊은 생각이 요구될 것 같아 그냥 하나씩 증가시키면서 구하는 방법으로 풀이했다. +*/ diff --git "a/raejun/\354\210\253\354\236\220\354\235\230\355\221\234\355\230\204.js" "b/raejun/\354\210\253\354\236\220\354\235\230\355\221\234\355\230\204.js" new file mode 100644 index 0000000..e6251e3 --- /dev/null +++ "b/raejun/\354\210\253\354\236\220\354\235\230\355\221\234\355\230\204.js" @@ -0,0 +1,38 @@ +function solution(n) { + var answer = 1; + + if (n === 1) return 1; + + for (let i = Math.ceil(n / 2); i >= 0; i--) { + let sum = 0; + + for (let j = i; j >= 0; j--) { + sum += j; + + if (sum > n) { + break; + } else if (sum === n) { + answer++; + break; + } + } + } + + return answer; +} + +/* +풀이 시간: 16분 + +시간 복잡도는 O(n^2)이다. +공간 복잡도는 O(1)이다. + +n이 1인 경우에는 1을 반환했다. +그 다음에, n의 절반부터 0까지 루프를 돌면서, i부터 0까지 루프를 돌면서, sum에 j를 더했다. +만약 sum이 n보다 크면, 내부 루프를 종료했다. +만약 sum이 n과 같으면, answer를 1 증가시키고, 내부 루프를 종료했다. +루프가 끝난 후에는 answer를 반환했다. + +천장에서 아래로 내려오면서 더하는 방식으로 풀이했는데 n이 1인 경우 예외 처리를 찾지 못해서 오래 걸렸다. +DP로 풀이하는 방법도 있을 것 같고, for문은 한 번만 도는 방법도 있을 것 같은데 한 번 찾아봐야겠다. +*/