중복값 처리와 배열 초기화 때문에 굉장히 애먹은 문제이다....

접근한 방식은 입력받은 하나의 수열값들을 인덱싱을 통해 표시를 해주고(음수값 + 고정 Value처리)

나머지 하나의 수열을 입력받으면서

교차점일 경우에 해당 인덱스 지점까지의 Prefix_Sum값을 비교해주는 것이다. 
(before 교차점까지의 PrefixSum의 차이값 비교)

하지만... 인덱싱 처리해준 값들을 여러테케를 돌리는 문제이다보니 

초기화 해주지 않은 것이 화근이었다...ㅠ

좀더 꼼꼼할 필요가 있는 자신을 돌아보게됨..

스티커 이미지

<Code>

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//pda_pro12
#include<algorithm>
#include<iostream>
#include<vector>
 
#define N_ 10001
#define sz(x) x.size()
using namespace std;
 
typedef long long ll; 
typedef double db; 
int a[N_], a1[N_], Prefix[N_], Prefix1[N_], n, m, Num[20002], Sum1, Sum2, ans, before, before1;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    while (cin >> n && n > 0) {
        ans = 0;  before = 0; before1 = 0;
        for (int i = 1; i <= n; i++) {
            cin >> a[i]; Num[a[i] + 10000= i;
            Prefix[i] = a[i];
            Prefix[i] += Prefix[i - 1];
        }
        cin >> m;
        for (int i = 1; i <= m; i++) {
            cin >> a1[i];
            Prefix1[i] = a1[i];
            Prefix1[i] += Prefix1[i - 1];
            if (Num[a1[i] + 10000]) {
                int lower_Sum = Num[a1[i] + 10000];
                Sum1 = Prefix[lower_Sum] - Prefix[before];
                Sum2 = Prefix1[i] - Prefix1[before1];
                before1 = i; before = lower_Sum;
                ans += (Sum1 > Sum2) ? Sum1 : Sum2;
            }
        }
        int r = Prefix[n] - Prefix[before];
        int q = Prefix1[m] - Prefix1[before1];
        ans += (r > q) ? r : q;
        cout << ans << '\n';
        for (int i = 0; i <= 20000; i++)
            Num[i] = 0
    }
    return 0;
}


'PS) BOJ > Binary Search' 카테고리의 다른 글

[C++] 랜선 자르기 [BOJ 1654]  (0) 2018.08.16
[C++] K번째 수[백준 1300]  (0) 2018.08.16
[C++] 게임 [백준 1072]  (0) 2018.08.16
[C++]입국심사[백준 3079]  (0) 2018.08.15

+ Recent posts