#include <bits/stdc++.h> using namespace std; int tc, n, a[200001], b[200001]; queue<long long> q; int main() { scanf("%d", &tc); while (tc--) { scanf("%d", &n); memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } int idx = 0; for (int i = 0; i < n; i++) { long long m = -1000000001; q.push(a[i]); if (i == n-1 || a[i] * a[i+1] < 0) { while (!q.empty()) { if (q.front() >= m) { m = q.front(); } q.pop(); } b[idx++] = m; } } long long ans = 0; for (int i = 0; i < idx; i++) { ans += b[i]; } printf("%lld\n", ans); } return 0; }

틀린 코드




#include <bits/stdc++.h> using namespace std; long long tc, n, a[200001], b[200001]; queue<long long> q; int main() { scanf("%lld", &tc); while (tc--) { scanf("%lld", &n); memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); for (int i = 0; i < n; i++) { scanf("%lld", &a[i]); } long long idx = 0; for (int i = 0; i < n; i++) { long long m = -1000000001; q.push(a[i]); if (i == n-1 || a[i] * a[i+1] < 0) { while (!q.empty()) { if (q.front() >= m) { m = q.front(); } q.pop(); } b[idx++] = m; } } long long ans = 0; for (int i = 0; i < idx; i++) { ans += b[i]; } printf("%lld\n", ans); } return 0; }

맞은 코드


계속 틀려서 짜증나서 모든 변수를 long long 으로 바꿨더니 갑자기 맞았어요... 배열 원소의 크기가 10^9 까지니까 int써도 되는거 아닌가요??.. 

틀왜맞은 처음 경험해봅니다 ㅠㅠ