반응형
문제 설명
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 이하의 자연수 입니다.
풀이
1~n 까지 연속된 자연수의 합이 n이 되는 개수를 구해야한다.
cnt를 1부터 n 까지 증가시키면서 큐에 담고, cnt의 누적합을 sum에 더해나간다.
초기값 sum = 1, cnt = 1
1. sum이 n보다 작으면 cnt를 증가시키고 sum에 누적한 후 큐에 담는다.
2. sum이 n과 같으면 answer를 증가시킨다.
3. sum이 n보다 크거나 같으면 q의 front(맨 앞에서 더해준 cnt)값을 sum에서 빼준 후 q의 front를 제거한다.
4. q의 사이즈가 0이 될때까지 반복
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int n) {
int answer = 0;
queue<int> q;
q.push(1);
int sum = q.front();
int cnt = q.front();
while(!q.empty()){
if(sum < n){
sum += ++cnt;
q.push(cnt);
}
if(sum == n) ++answer;
if(sum >= n){
sum -= q.front();
q.pop();
}
}
return answer;
}
반응형
'IT > 알고리즘' 카테고리의 다른 글
프로그래머스 - 단체사진 찍기(c++) (0) | 2020.10.29 |
---|---|
프로그래머스 - 괄호 변환 (c++) (0) | 2020.10.28 |
프로그래머스 - 쿼드압축 후 개수 세기(c++) (0) | 2020.10.26 |
프로그래머스 - 폰켓몬(c++) (0) | 2020.10.23 |
프로그래머스 - 땅따먹기(c++) (0) | 2020.10.22 |