레야몬

[C++] 9465번 스티커 - DP 본문

알고리즘/백준

[C++] 9465번 스티커 - DP

Leyamon 2022. 9. 4. 21:27

#include <iostream>
#include <algorithm>
#include <string.h>

#define MAX_NUM 100002

using namespace std;

int T, n;  //테스트 케이스의 개수 T, 스티커 가로 크기 n
int map[3][MAX_NUM];  //스티커 맵


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    cin >> T;
    
    for(int i=0; i<T; i++) {
        cin >> n;
        for(int j=0; j<2; j++) {
            for(int k=1; k<=n; k++)
                cin >> map[j][k];
        }
        
        for(int i=1; i<=n; i++) {
            map[0][i]+=max(map[1][i-1], map[2][i-1]);
            map[1][i]+=max(map[0][i-1], map[2][i-1]);
            map[2][i]+=max(map[0][i-1], map[1][i-1]);
        }
        cout << max({map[0][n], map[1][n], map[2][n]}) << endl;
        memset(map, 0, sizeof(int)*3*MAX_NUM);
    }
    
    return 0;
}

 

 

이제 실버는 쉽다. ㅋㅋㅋㅋㅋ 너무 쉽다. 저번 주까지만 해도 실버도 너무 어렵다. 막 이러면서 쩔쩔 맸었던 것 같은데 왠지 모르겠지만 이제는 너무 쉽다. 암튼... 이 코드를 짜고 나서 든 생각인데 생각해보니까 map[2][i]를 만들 필요가 없었다. 그냥 map[1][i-2], map[1][i-1]만 확인해주면 됬었는데... 뭐 코드 고치기는 싫으니까... 귀찮아

이번 문제는 참고 사이트가 없다. 그만큼 이제 실버는 쉽단 말씀!

 

 

 

 

 

 

※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다

Comments