본문 바로가기
개발/알고리즘

[프로그래머스][LEVEL2] 숫자의 표현

by ISA(류) 2021. 9. 3.

# 문제 원문

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

  • 1 + 2 + 3 + 4 + 5 = 15
  • 4 + 5 + 6 = 15
  • 7 + 8 = 15
  • 15 = 15

자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.

제한사항

  • n은 10,000 이하의 자연수 입니다.

입출력 예

n / result

15 4

# 문제 풀이

++보다 += 연산자가 빠르다는 것을 알게 해준 문제 단순히 완전탐색으로 하면 n까지의 모든 숫자의 연결 되는 숫자들을 체크해서 n과 같아지는 값들을 구하면 된다. 그런데 문제 풀고 나서 보니 그냥 n의 홀수인 약수들의 갯수 = 숫자의 표현과 동일하더라. 이것도 수학 공식으로 있는거 겠지.. 기억은 안나지만 ㅜㅜ; 완전탐색 버전보다 더 빠르고 간결했다. 왜 그런지는 수의 원리를 이해해야하지만

# 솔루션 플로우

1. 주어진 n 자체가 하나의 표현이므로 result를 1 추가해준다.

2. n까지 반복하면서 각 수의 연결된 수들을 합한 값이 n이 되는 수가 있는지 순회한다.

3. n과 같다면 result 1해주고 break;

4. n보다 크다면 break;

5 구해진 result를 반환한다.

1. 반복문을 활용한 풀이

function solution(n) {
    let result = 1;

    for (let int = 1; int < n; int++) {
        let state = 0;
        for (let num = int; num < n; num++) {
            state += num;
            if (state === n) {
                result += 1;
                break;
            }
            if (state > n) {
                break;
            }
        }
    }
    return result;
}
반응형