08.05에 푼 문제입니다🌷
숫자의 표현
function solution(n) {
var answer = 1;
let nums = []
for(let i=1;i<=n;i++)nums.push(i)
for(let i = 1;i<=n;i++){
let calnum = i
for(let j=i+1;j<=n;j++){
calnum+=j
if(calnum===n){
answer++
break
}
}
}
return answer;
}
효율성을 생각 안해서 2중 for 문으로 풀었다. 효율성 테케를 통과하지 못했다 ㅠ
효율성을 생각해서 투포인터로 풀었다.
투포인터는 연속된 수를 구할 때 많이 사용한다.
투포인터 풀이는 간단하다.
start 변수와 end 변수를 따로 보고
start 번지에서 end 번지까지 더한 값이 작으면 end 변수에 1을 더해서 확장시킨다.
더한 값이 맞으면 answer를 증가시키고
start에 1을 더해서 미뤄준다.
function solution(n) {
var answer = 0
let nums = []
for(let i=1;i<=n;i++)nums.push(i)
let start = 0
let end = 0
let total = 0
while(start<nums.length){
while(total<n&&end<nums.length){
total+=nums[end++]
}
if(total===n) answer++
total -= nums[start]
start++
}
return answer;
}
어마어마한 풀이를 봤다..
n의 약수에서 홀수의 개수가 정답인 것이다.
수학적으로 가능한건지 궁금하다🤔
function solution(n) {
var answer = 0
for(var i=1; i<=n; i++) {
if (n%i == 0 && i%2 == 1)
answer++
}
return answer;
}