문제
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;
}
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/C++, C#] 달리기 경주 (0) | 2024.03.04 |
---|---|
[프로그래머스/C++] 광물 캐기 (0) | 2024.02.28 |
[프로그래머스/C++, C#] 네트워크 (0) | 2024.02.19 |
[프로그래머스/C++] 리코쳇 로봇 (1) | 2024.02.18 |
[프로그래머스/C#]가장 많이 받은 선물 (0) | 2024.02.13 |