js 프로그래머스 숫자의 표현

이명진·2022년 9월 27일
0

코드카타

목록 보기
45/69

레벨 2단계 문제이다.

문제 요약

하나의 자연수가 주어진다. 연속된 자연수들의 합으로 그 자연수와 같은 방법을 카운트하면된다. 연속된 자연수가 아니면 어려울뻔했다.

내가푼 풀이

function solution(n) {
    let answer = 0;
  	let numArr = [];
  	for(let i=1;i<=n;i++){
      numArr.push(i)
    }
  console.log(numArr)
  let makeNum = [];
  let result = 0;
  makeNum.push(numArr[0])
  let idx = 1;
  
  while(idx<=n){
    
    result = makeNum.reduce((arr,cur)=>{
      return arr+cur
    })
   
    if(result>=n){
      if(result==n){
         makeNum.push(numArr[idx])
      	answer++
      	idx++
      }else{
         makeNum.shift()
      }
     
    }else if(result<n){
      makeNum.push(numArr[idx])
      idx++
    }
  }
    return answer;
}

다행히도 한번에 풀수 있었다.
나는 자연수만큼 포문을 돈다음에 배열에 순서대로 자연수들을 담아둔다.
그리고 담아둔 배열을 활용하여서 하나의 배열을 만들어서 덧셈을 진행하는데 만약 주어진 자연수보다 크면 배열에서 앞에서 제거해주고 아니면 기존 모아두었던 배열에서 하나씩 담아준다. 이것을 반복해서 답을 도출해 낼수 있었다.
정확성 효율성 둘다 통과할수 있었다.

다른사람의 풀이 풀이

function expressions(num) {
    var answer = 0;

  for(var i=1; i<=num; i++) {
    if (num%i == 0 && i%2 == 1)
      answer++
  }
    return answer;
}

보자마자 띠용 생각이 들었다. 해설을 보니 약수의 갯수로 판단을 한거 같다.
수학으로 문제를 접근한것 같은데 기발하면서 어렵다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글