구름LEVEL
구름LEVEL 문제를 풀이하고 부족한 부분을 보완하며 실력을 키워보세요. 구름LEVEL은 코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입
level.goorm.io
풀이
투포인터 알고리즘
start와 end 변수를 각각 시작, 끝 포인터로 활용
1. input[start] 부터 input[end] 까지 더한 값 sum이 m보다 작으면 end+ 1
2. m보다 크면 start + 1
3. m과 같으면 answer + 1 (경우의 수 카운트)
4. m보다 작으면서 end 포인터가 input의 길이를 벗어날 경우 >> 더이상 정답이 나올 수 없는 경우
int main() {
int n;
int m;
cin >> n >> m;
vector<int> input;
// input vector에 입력 값 저장
for (int i = 0; i < n; i++) {
int temp;
cin >> temp;
input.push_back(temp);
}
int start=0; // 왼쪽 포인터
int end=0; // 오른쪽 포인터
int answer = 0; // 정답 카운트
// end가 input 의 범위 안일 경우 반복
while (end<n) {
// start ~ end 의 합
int sum=0;
for (int i = start; i <= end; i++)
sum += input[i];
// sum == m 일 경우 정답 카운트 + 1
if (sum == m) {
answer++;
// start 포인터 1 증가
start += 1;
}
// sum < m 일 경우
else if (sum < m)
// 다른 수를 더해서 m을 만들어야 하므로 end 포인터 증가
end += 1;
// sum > m 일 경우
else if (sum > m)
// 수를 작게 만들어야 하므로 start 포인터 증가
start += 1;
}
cout << answer << endl;
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[백준] 가운데를 말해요 Java (0) | 2023.07.17 |
---|---|
[구름] 직사각형 만들기 C++ (0) | 2023.07.11 |
[구름] 단풍나무 C++ (0) | 2023.07.10 |
[구름] 뒤통수가 따가워 C++ (0) | 2023.07.07 |
[구름] 현대모비스 예선-주차시스템 C++ (0) | 2023.07.07 |