https://school.programmers.co.kr/learn/courses/30/lessons/12924

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제

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
입출력 예 설명
입출력 예#1
문제의 예시와 같습니다.


문제 해결을 위한 과정

연속된 숫자를 더해나가며 목표치인 n과 일치하는지 확인하는 '완전 탐색' 방식으로 접근하며 이 문제를 해결할 수 있습니다.

  1. 시작점 고정 (바깥쪽 for문): 1부터 n까지 연속된 수열의 시작 숫자를 정해줍니다. (i)
  2. 연속된 수 더하기 (안쪽 for문): 시작 숫자 i부터 1씩 커지는 숫자 j를 sum에 계속 누적해서 더해줍니다.
  3. 조건 검사 및 가지치기:
    • sum > n: 더한 값이 이미 목표치 n을 넘어섰다면 더 이상 뒤의 숫자를 더할 필요가 없으므로 즉시 반복을 멈춥니다(break).
    • sum == n: 누적 합이 n과 정확히 일치하면 정답 카운트를 1 증가시키고, 역시 더 이상 더할 필요가 없으니 반복을 멈춥니다(break).
  4. 이렇게 시작점을 옮겨가며 모든 경우의 수를 검사하여 최종 가짓수를 반환합니다.

소스코드
import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i = 1; i <= n; i++) {
            int sum = 0;
            for(int j = i; j <= n; j++) {
                sum += j;
                if(sum > n) {
                    break;
                } else if(sum == n) {
                    answer += 1;
                    break;
                }
            }
        }
        
        return answer;
    }
}

+ Recent posts