• [백준OJ] 9465번 스티커

    2021. 8. 31.

    by. Hyeon-Uk

    반응형

    https://www.acmicpc.net/problem/9465

     

    9465번: 스티커

    첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의

    www.acmicpc.net


     

    풀이

    dp[i][j]=k 라고 할때, i번째열에서 j번째 스티커를 골랐을떄 ( 0 = 첫번째 스티커 / 1 = 두번째 스티커 / 2 = 아무것도 선택 x ) 0번째~i번째 열까지의 스티커점수의 최댓값을 k라고 하자.

     

    먼저

    1. i번열에서 첫번째 스티커를 고르기 위해서는 i-1번 열에서 두번째 스티커를 고른경우와 i-1번 열에서 아무것도 고르지 않은 경우가 있다. 이 두 경우중에서 더 큰쪽과 i번열의 첫번째 스티커를 더해주면, i번열에서 첫번째 스티커를 고른경우, i번열까지의 최댓값이 나온다.

     

    2. i번열에서 두번째 스티커를 고르기 위해서는 i-1번 열에서 첫번째 스티커를 고른경우와 i-1번 열에서 아무것도 고르지 않은 경우가 있다.  이 두 경우중에서 더 큰쪽과 i번열의 두번째 스티커를 더해주면, i번열에서 두번째 스티커를 고른경우, i번열까지의 최댓값이 나온다.

     

    3. i번열에서 아무 스티커도 고르지 않는다면, i-1번열에서 첫번째스티커를 고른경우, 두번째 스티커를 고른경우, 아무것도 고르지 않은경우중 가장 큰 경우를 가지고 오면된다.

     

    시간복잡도

    O(N)

     

    반응형

    코드

    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int maze[100001][2];
    int dp[100001][3] = { 0 };
    int t, n;
    
    void input() {
    	cin >> n;
    
    	for (int j = 0; j < 2; j++) {
    		for (int i = 0; i < n; i++) {
    			cin >> maze[i][j];
    		}
    	}
    }
    
    int DP() {
    
    	dp[0][0] = maze[0][0];
    	dp[0][1] = maze[0][1];
    
    	for (int i = 1; i < n; i++) {
    		//1번째꺼 선택 = i-1에서 2번째꺼선택+1번째꺼 / i-1에서 아무것도 선택x+1번째꺼중 큰거
    		dp[i][0] = max(dp[i - 1][1], dp[i - 1][2]) + maze[i][0];
    
    		//2번째꺼 선택 = i-1에서 1번째꺼선택+i번째에서 2번째꺼 / i-1에서 아무것도 선택x + 2번째꺼 중 큰거
    		dp[i][1] = max(dp[i - 1][0], dp[i - 1][2]) + maze[i][1];
    
    		//아무것도 선택 x = i-1에서 가장 큰거
    		dp[i][2] = max(dp[i - 1][0], max(dp[i - 1][1], dp[i - 1][2]));
    	}
    	return max(dp[n - 1][0], max(dp[n - 1][1], dp[n - 1][2]));
    }
    
    void solve() {
    	input();
    	cout<< DP()<<"\n";
    }
    
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0); cout.tie(0);
    
    	cin >> t;
    	while (t--) {
    		solve();
    	}
    	return 0;
    }

     

    반응형

    '문제풀이 > 백준oj' 카테고리의 다른 글

    [백준OJ] 17298번 오큰수  (2) 2021.09.02
    [백준OJ] 22993번 서든어택 3  (0) 2021.09.01
    [백준OJ] 14620번 꽃길  (0) 2021.08.30
    [백준OJ] 4195번 친구 네트워크  (0) 2021.08.29
    [백준OJ] 1034번 램프  (0) 2021.08.28

    댓글