쌓고 쌓다

[프로그래머스] 숫자의 표현 Java 풀이 및 해설 본문

알고리즘/프로그래머스

[프로그래머스] 숫자의 표현 Java 풀이 및 해설

승민아 2025. 2. 14. 10:15

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

 

프로그래머스

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

programmers.co.kr

 

풀이 방법

연속된 자연수들의 합으로 총합을 찾는 문제이다.

연속된 자연수이므로 시작 자연수를 나타내는 Left와 끝 자연수를 나타내는 Right 자연수를 선언한다.

 

Left와 Right 까지의 합을 찾는 목표 값과 비교하며 늘렸다 줄였다하며 찾아간다.

 

Left부터 Right까지의 합이 목표값보다 작다면 Right를 늘려주고

Left부터 Right까지의 합이 목표값보다 크다면 Left를 줄여주며

연속된 자연수들의 합으로 목표값을 만들 수 있는 가짓수를 찾을 수 있다.

 

Left와 Right의 늘였다줄였다 반복은 left가 right보다 작거나 같을때까지 반복하면 된다.

 

 

전체 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        int left = 1;
        int right = 1;
        
        while (left <= right) {            
            
            int sum = 0;
            for (int i = left; i <= right; i++) {
                sum += i;
            }
                
            if (sum < n) { // sum이 목표값 n 보다 작은경우 right를 늘림
                right++;
            } else if (sum == n) { // sum == n
                answer++;
                right++;
            } else { // n보다 큰 경우 left 이동
                left++;
            }
            
        }
        
        return answer;
    }
}

 

Comments