728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12924?language=javascript 

 

코딩테스트 연습 - 숫자의 표현

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할

programmers.co.kr

 

코드


function solution(n) {
  let answer = 0; //정답이 될 변수
  let i = 1; //1부터 n까지 하나씩 오르는 변수
  while (i <= n) {
    let j = i; //현재 i를 copy
    let copy = n; //n을 copy
    while (copy > 0) {
      //copy 즉, n이 양수일 동안
      copy = copy - j; //연속된 수 j를 하나씩 빼주기
      j++; //ex) 15 = 15-1 -> 14 = 14-2 -> 12 = 12-3 -> 9 = 9-4 ...
    }
    i++; //i를 +1 해줘서 다음 수부터 연속되는 수에대해서 또 찾기
    if (copy === 0) answer++;
    //두번째 while문을 통해서 나온 copy가 0이라면 연속된 j 수들의 덧셈에 의해 0으로 떨어진 것이니 정답 +1
    else continue; //0으로 떨어지지 않았다면 i로 시작된 연속된 수는 n을 만들 수 없다는 의미니까 그냥 continue
  }
  return answer;
}

 

후기


  • 문제 유형이 적혀있진 않았지만 그리디 알고리즘을 생각하며 풀어보았다
  • i, j, n, copy 등 여러 변수들이 짧은 코드안에 복잡하게 등장했는데 각 쓰임새만 안 헷갈리면 쉽게 풀 수 있는 문제였다
  • 하지만 좀 더 효율적인 방법이 있을 것 같다..

+ Recent posts