문제

수학을 공부하던 민지는 재미있는 사실을 발견하였습니다. 그 사실은 바로 연속된 자연수의 합으로 어떤 숫자를 표현하는 방법이 여러 가지라는 것입니다. 예를 들어, 15를 표현하는 방법은 (1+2+3+4+5)
(4+5+6)
(7+8)
(15)
로 총 4가지가 존재합니다. 숫자를 입력받아 연속된 수로 표현하는 방법을 반환하는 expressions 함수를 만들어 민지를 도와주세요. 예를 들어 15가 입력된다면 4를 반환해 주면 됩니다.

풀이 1

public class Expressions {
  public int expressions(int num) {
    int answer = 0;
    int sum;
    
    for(int i=1 ; i<=num ; ++i) {
      sum = 0;
      for(int j=i ; j<=num ; ++j) {
        sum += j;
        if(sum == num) {
          answer++;
          break;
        }
      }
    }

    return answer;
  }

  public static void main(String args[]) {
    Expressions expressions = new Expressions();
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    System.out.println(expressions.expressions(15));
  }
}

노가다를 하여 풀었다. 그냥 1부터 주구장창 더해가면서 그 수가 num과 같으면 answer에 +1 해주는 방식이다.

풀이 2

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));
    }
}

이 풀이는 해당 풀이 댓글에 적힌 설명을 봐도 잘 이해가 안된다. 더 찾아봐야겠다.