본 글은 글쓴이의 개인적인 생각이 담겨있을 수 있습니다.
프로그래머스 [Programmers]
LEVEL - 2
숫자의 표현
https://programmers.co.kr/learn/courses/30/lessons/12924
숫자 n이 주어질 때, n을 연속하는 자연수로 만들 수 있는 경우의 수를 구하라.
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의 약수를 구하고 그 중 홀수인 약수만 골라서
그 갯수를 세면 아주 간단하게 풀 수 있다.
풀면서 이런 공식이 있을 거라고는 생각을 했다.
왜냐하면 연습문제라고 생각하기엔 생각할 시간을 만들었다.
(다른 연습문제의 수준을 보면 알 수 있다.)
공식을 보지 않고 풀어보면서 공식을 모르고 푸는 것이
알고리즘 능력을 향상하는데 더 도움이 되는 것 같다.