반응형
https://www.acmicpc.net/problem/2018
sliding window로 풀었습니다.
📕 풀이방법
📔 입력 및 초기화
l = 1, r = 1로 출발합니다. 답을 출력할 변수 ans, 연속구간의 누적합을 저장할 변수 sum, 입력받을 변수 n을 선언합니다.
📔 풀이과정
l <= r, r <=n 인동안 loop를 돌며 다음을 수행합니다.
1. 만약 연속구간의 합이 n보다 작다면 r을 더해줍니다.
2. 이상일 때는 sum==n인 경우아 sum > n인 경우가 있습니다. sum == n이라면 바로 ans를 더해줍니다. 아닌경우는 가장 왼쪽의 l값을 sum에서 제한뒤 l++해줍니다.
📔 정답출력
자기 자신도 답에 포함되므로 ans + 1을 출력합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
int n,l=1,r=1,sum,ans;
int main(){
cin >> n;
while(l <= r && r <= n) {
if(sum < n) sum += r++;
else{
if(sum == n) ans++;
sum -= l++;
}
}
cout << ans + 1;
}
'Algorithm > Sweeping' 카테고리의 다른 글
(C++) - 백준(BOJ) 20366 : 같이 눈사람 만들래? (0) | 2022.06.30 |
---|---|
(C++) - 백준(BOJ) 15565번 : 귀여운 라이언 (0) | 2021.08.22 |
(C++) - 백준(BOJ) 1689번 : 겹치는 선분 (0) | 2021.08.11 |
(C++) - 백준(BOJ) 2467번 : 용액 (0) | 2021.07.19 |
(C++) - 백준(BOJ) 1911 : 흙길 보수하기 (0) | 2021.05.05 |