Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 과제진행하기
- div2개
- 프로그래머스
- c++
- 우박수열정적분
- 2023카카오블라인드코테
- 최소스패닝트리
- 지도 여러개
- solved.ac플래티넘
- 비트마스크
- pccp기출문제
- DP
- 5강클로저
- 코어자바스크립트
- 백준 알고리즘
- 타겟넘버
- 백준알고리즘
- JS
- 이중지도
- 정렬
- JS스터디
- Lv3
- [pccp 기출문제]
- solved.ac골드
- React.StrictMode
- 스택
- 두원사이의정수쌍
- Lv2
- 알고리즘문제풀이
- 알고리즘 문제풀이
Archives
- Today
- Total
호지
[백준 알고리즘] 1806번 부분합 본문
pos에 부분합의 가장 왼쪽 위치,
len에는 부분합의 길이,
sum에는 부분합의 합계를 저장한다.
0~n까지 i for문을 돌면서
len을 1증가하고 list[i]를 sum에 더한다.
이 때, sum이 s이상이라면
sum이 s보다 작을 때까지 while문을 돌면서
부분합의 최소 길이를 구한다.
#include <iostream>
using namespace std;
int list[100000];
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
long long s;
cin >> n >> s;
for(int i=0; i<n; i++){
cin >> list[i];
}
int pos = 0, len = 0, res = 100001;
long long sum = 0;
for(int i=0; i<n; i++){
sum += list[i];
len ++;
while(sum >= s){
res = min(len, res);
sum -= list[pos];
pos ++;
len --;
}
}
if(res == 100001)
res = 0;
cout << res;
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 알고리즘] 2098번 외판원 순회 c++ (0) | 2022.05.06 |
---|---|
[백준 알고리즘] 1987번 알파벳 문제풀이 c++ (0) | 2022.05.05 |
[백준 알고리즘] 1799번 비숍 문제풀이 c++ (0) | 2022.05.04 |
[백준 알고리즘] 1766번 문제집 문제풀이 c++ (0) | 2022.05.02 |
[백준 알고리즘] 1647번 도시 분할 계획 (0) | 2022.05.02 |
Comments