https://programmers.co.kr/learn/courses/30/lessons/12924
class Solution {
public int solution(int n) {
int answer = 0;
for (int i=1; i<= n; i++){
int result = 0;
int adder = i;
while (result <= n){
result += adder;
if (result == n){
answer++;
break;
}
else adder++;
}
}
return answer;
}
}
public class Expressions {
public int expressions(int num) {
int answer = 0;
for (int i = 1; i <= num; i += 2) {
if (num % i == 0) {
answer++;
}
}
return answer;
}
public static void main(String args[]) {
Expressions expressions = new Expressions();
// 아래는 테스트로 출력해 보기 위한 코드입니다.
System.out.println(expressions.expressions(15));
}
}
코드 설명!
> 주어진 자연수를 x라 하고, a, b, c, d, k, n은 자연수라고 가정
1) x를 홀수개의 연속된 자연수의 합으로 표현할 수 있는 경우
1개 : b => 1*b [단, b >= 1]
3개 : b-1, b, b+1 => 3*b [단, b >= 2]
2a-1개 : b-(a-1), … b, …, b+(a-1) => (2a-1)*b [단, b >= a]
2) x를 짝수개의 연속된 자연수의 합으로 표현할 수 있는 경우
2개 : d-1, d => 1*(2d-1) [단, d >= 2]
4개 : d-2, d-1, d, d+1 => 2*(2d-1) [단, d >= 3]
2d개 : d-c, …, d, …, d+(c-1) => c*(2d-1) [단, d >= c+1]
3) 1)과 2)를 합쳐서 표현하면 x = (2k-1)n [단, n>=k이면 홀수개]
연산이 적은 코드를 작성하려면 어느정도 문제를 수학적으로 생각하며 풀어야하는 것 같다.
고등학교 이후 수학을 별로 접하지 않아 수학능력이 현재 많이 떨어졌으나 효율성이 높은 코드를 구현하려면 수학 공부도 필요할 것 같다.😥