어흥
[백준 2011] 암호코드 (C++) 본문
728x90
반응형
문제 링크: https://www.acmicpc.net/problem/2011
2011번: 암호코드
문제 상근이와 선영이가 다른 사람들이 남매간의 대화를 듣는 것을 방지하기 위해서 대화를 서로 암호화 하기로 했다. 그래서 다음과 같은 대화를 했다. 상근: 그냥 간단히 암호화 하자. A를 1이라고 하고, B는 2로, 그리고 Z는 26으로 하는거야. 선영: 그럼 안돼. 만약, "BEAN"을 암호화하면 25114가 나오는데, 이걸 다시 글자로 바꾸는 방법은 여러 가지가 있어. 상근: 그렇네. 25114를 다시 영어로 바꾸면, "BEAAD", "YAAD", "
www.acmicpc.net
1. 주의할 점
- 최대 길이가 5000자, 결과는 백만으로 나눈 나머지를 출력한다.
- 시작숫자가 0이면 불가능하므로 0을 출력한다.
2. 구현
- 현재 확인하는 숫자가 0이 아니라면 우선 이전값만큼 가능하다(뒤에 숫자하나만 추가하면 되기 때문)
- 현재 확인하려는 숫자와 그 전 숫자가 10~26이면 마지막 2개를 통해 새로운 글자가 표현 가능하다. 즉, DP[n-2]만큼의 암호가 또 생길 수 있다.
#define MOD 1000000
#include <iostream>
#include <string>
using namespace std;
long long dp[5001];
int main() {
string str;
cin >> str;
dp[0] = 1;
dp[1] = 1;
if (str[0]-'0' == 0) cout << 0;
else {
for (int i = 2; i <= str.size(); i++) {
if (str[i - 1] - '0' > 0)
dp[i] = dp[i - 1] % MOD;
int x = (str[i - 2] - '0') * 10 + str[i-1] - '0';
if (10 <= x && x <= 26)
dp[i] = (dp[i] + dp[i - 2]) % MOD;
}
cout << dp[str.size()];
}
system("pause");
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 15644] 구슬 탈출 3 (C++) (0) | 2020.03.23 |
---|---|
[백준 15653] 구슬 탈출 4 (C++) (0) | 2020.03.23 |
[백준 18809] Gaaaaaaaaaarden (C++) (0) | 2020.03.21 |
[백준 18808] 스티커 붙이기 (C++) (2) | 2020.03.21 |
[백준 1600] 말이 되고픈 원숭이 (C++) (0) | 2020.03.20 |
Comments