코테/프로그래머스

[프로그래머스/C++] 산 모양 타일

내꺼블로그 2024. 2. 26. 13:52

문제


 

https://school.programmers.co.kr/learn/courses/30/lessons/258705?language=cpp

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

코드


 

#include <string>
#include <vector>
#define mod 10007

using namespace std;

int solution(int n, vector<int> tops) {
    int answer = 0;
    long long dp[100001][2]={{1,0}};
    for(int i=1;i<=n;i++){
        if(tops[i-1]==1)
            dp[i][0]=((dp[i-1][0]+dp[i-1][1])*3)%mod;
        else
            dp[i][0]=(dp[i-1][0]+dp[i-1][1])*2%mod;
        if(i==1){
            dp[i][1]=1;
        }
        else if(i==2){
            dp[i][1]=2;
        }
        else{
            dp[i][1]=dp[i-1][1]+dp[i-2][0]+dp[i-2][1];
        }
        if(i>=2&&tops[i-2]==1)
                dp[i][1]+=dp[i-2][0]+dp[i-2][1];
        dp[i][1]%=mod;
    }
    answer=(dp[n][0]+dp[n][1])%mod;
    return answer;
}

 

 

 

리팩토링

#include <string>
#include <vector>
#define mod 10007

using namespace std;

int solution(int n, vector<int> tops) {
    int answer = 0;
    long long dp[100001][2]={{1,0}};
    if(tops[0]==0) dp[1][0]=2;
    else dp[1][0]=3;
    dp[1][1]=1;
    for(int i=2;i<=n;i++){
        dp[i][0]=((dp[i-1][0]+dp[i-1][1])*(2+tops[i-1]))%mod;
        dp[i][1]=(dp[i-1][1]+(dp[i-2][0]+dp[i-2][1])*(1+tops[i-2]))%mod;
    }
    answer=(dp[n][0]+dp[n][1])%mod;
    return answer;
}