728x90
반응형
https://www.acmicpc.net/problem/2018
투 포인터 개념에 대해 처음 접해봤다.
사실상 반복문에서 범위를 빠르게 정해가며 계산하기 위한 개념임을 배웠다.
즉 while 문을 도는데 start와 end 변수를 활용해 start ~ end까지 합을 구해가며 주어진 N과 비교하는 방법이다.
start, end, cnt 변수를 준비하고 start = 1, end = 1, cnt = 1에서 시작한다.
start + end = sum으로 치환
만약 sum < N -> end를 1씩 늘리고 sum += end
만약 sum == N -> cnt와 end를 1씩 늘리고 sum += end
만약 sum > N -> sum -= start 하고 start를 1씩 늘린다
ex) N = 5일 때
start = 1, end = 1, sum = 0 -> sum = 2 < N
start = 1, end = 2, sum = 3 -> sum < N
start = 1, end = 3, sum = 6 -> sum > N
start = 2, end = 3, sum = (6-1) -> sum == N
이런 식으로 찾아간다.
#include<iostream>
#define FastIO ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL);
using namespace std;
int main(void)
{
FastIO;
int N = 0;
int start = 1, end = 1, sum = 1, cnt = 1;
cin >> N;
while(end != N)
{
if (N == sum)
{
cnt++;
end++;
sum += end;
}
else if (sum < N)
{
end++;
sum += end;
}
else
{
sum -= start;
start++;
}
}
cout << cnt << "\n";
return 0;
}
728x90
반응형
'알고리즘 (C++)' 카테고리의 다른 글
[백준]1296번: 팀 이름 정하기 (0) | 2023.12.13 |
---|---|
[백준]25497번: 기술 연계마스터 임스 (0) | 2023.12.06 |
[백준]11501번: 주식 (0) | 2023.11.27 |
[백준]11652번: 카드 (0) | 2023.11.24 |
[백준]15900번: 나무 탈출 (1) | 2023.11.23 |