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 |
Tags
- Unreal Engine 5
- 유니온 파인드
- 수학
- DFS
- 스택
- 브루트포스
- 누적 합
- 알고리즘
- VR
- 그래프
- BFS
- 다익스트라
- 그리디 알고리즘
- 백트래킹
- Team Fortress 2
- 트리
- 백준
- 유니티
- 구현
- 투 포인터
- ue5
- XR Interaction Toolkit
- 문자열
- 정렬
- 다이나믹 프로그래밍
- 우선순위 큐
- 재귀
- 시뮬레이션
- c++
- 자료구조
Archives
- Today
- Total
1일1알
백준 4929번 수열 걷기 C++ 본문
두 길을 비교하면서 작은 쪽을 한칸씩 전진시키면서 합을 누적시키고 두 길의 값이 같은 곳에 도달하면 누적된 합 중 큰 값을 최종 합에 추가시키는 방식으로 문제를 해결하였다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
using namespace std;
using ll = long long;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
while (true) {
int l1, l2;
cin >> l1;
if (l1 == 0) break;
vector<int> v1(l1);
for (int i = 0; i < l1; i++) {
cin >> v1[i];
}
cin >> l2;
vector<int> v2(l2);
for (int i = 0; i < l2; i++) {
cin >> v2[i];
}
int sum = 0;
int part_sum1 = 0;
int part_sum2 = 0;
int p1 = 0;
int p2 = 0;
while (true) {
if (p1 == l1 && p2 == l2) {
sum += max(part_sum1, part_sum2);
break;
}
else if (p1 == l1) {
part_sum2 += v2[p2];
p2++;
continue;
}
else if (p2 == l2) {
part_sum1 += v1[p1];
p1++;
continue;
}
if (v1[p1] > v2[p2]) {
part_sum2 += v2[p2];
p2++;
}
else if (v1[p1] < v2[p2]) {
part_sum1 += v1[p1];
p1++;
}
else {
sum += max(part_sum1, part_sum2);
sum += v1[p1];
part_sum1 = 0;
part_sum2 = 0;
p1++;
p2++;
}
}
cout << sum << "\n";
}
};
'알고리즘' 카테고리의 다른 글
백준 14246번 k보다 큰 구간 C++ (0) | 2022.03.10 |
---|---|
백준 2118번 두 개의 탑 C++ (0) | 2022.03.09 |
백준 22945번 팀 빌딩 C++ (0) | 2022.03.07 |
백준 12892번 생일 선물 C++ (0) | 2022.03.06 |
백준 10472번 십자뒤집기 C++ (0) | 2022.03.05 |