코깽이의 코딩일기

[ 프로그래머스 / JAVA / Level 2 ] 숫자의 표현 본문

PS/프로그래머스

[ 프로그래머스 / JAVA / Level 2 ] 숫자의 표현

코깽이 2024. 5. 29. 17:03
반응형

제출한 코드

import java.io.*;
import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;
        int left = 1;
        int right = 1;
        
        int sum = 1;
        n = 1;
        // 예외 상황
        if(n==1){
            return 1;
        }
        
        // 슬라이딩 윈도우 시작
        while(left <= n && right <= n){

            // sum이 n보다 작은 경우
            if(sum < n){
                right++;
                sum += right;
            }
            // sum이 n보다 크거나 같은 경우
            else if(sum >= n){
                // left 값을 올리기 전에 빼고 올려준다.
                sum -= left;
                left++;
            }
            
            // 정답을 찾은 경우
            if(sum == n){
                answer++;
            }
            
        }

        return answer;
    }
}

생각한 로직

1. "연속 되는 수의 합" 을 구하는 문제이기에 슬라이딩 윈도우로 해결하였다.

2. left와 right를 1로 잡고 시작.

3. sum이 n보다 작으면 right++;

4. sum이 n보다 크면 left++; ( 단, sum의 값을 수정 후에 left를 증가시켜야한다. )

5. 값을 찾은 경우 answer++

반응형