[프로그래머스] 숫자의 표현

GomHyeok·2022년 3월 23일
0

📒활용 개념

연속된 수를 하나의 vector에 넣어두고 어떻게 그 수를 처리할 것인가.

📌문제설명

자연수 n에 대하여 n보다 작거나 같은 연속된 자연수들의 합으로 n이 되는 경우의 수
n이하의 연속된 자연수를 어떻게 다룰 것인가.

📌구현

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(int n) {
    int answer = 0;							
    int left=1;									//더하는 수 중 가장 작은 수
    int right=1;								//더하는 수 중 가장 큰 수
    int sum=1;									//더한 결과 값
    vector<int> arr(n+1);						//n이하의 연속된 자연수를 담은 Vector
    for(int i=1; i<=n; i++){
        arr[i]=i;
    }
    
    while(right!=n){
        if(sum<n){
            sum+=arr[++right];					//결과가 n보다 작을 경우 연속된 자연수 하나를 더 더해준다.
        }
        else if(sum>n){
            sum-=arr[left];						//결과가 n보다 큰 경우 연속된 자연수 중 가장 작은 값을 뺀다.
            left++;
        }
        else if(sum==n){
            answer++;
            sum=sum-arr[left]+arr[++right];		//결과가 n과 같을 경우 가장 연속된 자연수 하나를 더 더하고 가장 작은 값을 뺀다.
            left++;
        }
    }
    
    return (answer+1);
}

📌주의점

  • vector에서 어떻게 연속된 수를 빼고 더할 것인가.
  • 마지막에 n=n인 경우를 생각할 수 있는가.
profile
github : https://github.com/GomHyeok/

0개의 댓글

관련 채용 정보