[Programmers] 숫자의 표현

Jaychy·2020년 12월 11일
0
post-thumbnail

본 글은 글쓴이의 개인적인 생각이 담겨있을 수 있습니다.

프로그래머스 [Programmers]
LEVEL - 2
숫자의 표현
https://programmers.co.kr/learn/courses/30/lessons/12924

문제 파악

문제

숫자 n이 주어질 때, n을 연속하는 자연수로 만들 수 있는 경우의 수를 구하라.

주의사항

  • n은 10000 이하의 자연수이다.

해결

class Solution {
    public int solution(int n) {
        int addNumber = 1;
        int firstAddNumber = 1;
        int sum = 0;
        int count = 0;
        
        while(true) {
            if(addNumber >= n)
                break;
            sum += addNumber++;

            if(sum == n) {
                count++;
                addNumber = ++firstAddNumber;
                sum = 0;
            } else if(sum > n) {
                addNumber = ++firstAddNumber;
                sum = 0;
            }
        }
        
        return count + 1;
    }
}

이 문제는 공식을 알면 정말 쉽게 풀 수도 있다.
수학에서는 다음과 같이 말한다.

자연수 n을 연속하는 자연수들로 표현할 때 그 경우의 수는 n의 홀수인 약수의 갯수이다.

그렇기 때문에 주어지는 n의 약수를 구하고 그 중 홀수인 약수만 골라서
그 갯수를 세면 아주 간단하게 풀 수 있다.

느낀 점

풀면서 이런 공식이 있을 거라고는 생각을 했다.
왜냐하면 연습문제라고 생각하기엔 생각할 시간을 만들었다.
(다른 연습문제의 수준을 보면 알 수 있다.)
공식을 보지 않고 풀어보면서 공식을 모르고 푸는 것이
알고리즘 능력을 향상하는데 더 도움이 되는 것 같다.

profile
아름다운 코드를 꿈꾸는 백엔드 주니어 개발자입니다.

0개의 댓글

관련 채용 정보