일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 표준 입출력
- UI한글변경
- string 메소드
- string 함수
- vscode
- 2557
- 알고리즘 공부방법
- 백준
- 자료구조
- c++
- 입/출력
- 입출력 패턴
- 연결요소
- Django의 편의성
- correlation coefficient
- scanf
- getline
- 매크로
- Django Nodejs 차이점
- 구조체와 클래스의 공통점 및 차이점
- k-eta
- iOS14
- 장고란
- 시간복잡도
- 엑셀
- 이분그래프
- double ended queue
- EOF
- 프레임워크와 라이브러리의 차이
- Django란
Archives
- Today
- Total
Storage Gonie
(21) [C, C++, Java] 백준 No.2011 : 암호코드 본문
반응형
문제
풀이
자세한 풀이 : https://ldgeao99.tistory.com/entry/챕터3-22-DP-문제-풀이4-5-백준-No2011-암호코드
# C++
#include <iostream>
using namespace std;
int d[5001];
int main()
{
string s;
cin >> s;
s = " " + s; // index를 1부터 사용하기 위함.
int s_len = s.length() - 1;
d[0] = 1;
for (int i = 1; i <= s_len; i++){
/*s[i] 한 자리 수 인 경우로 인식하여 개수 카운트*/
int c = s[i] - '0';
if (1 <= c && c <= 9){
d[i] += d[i-1];
d[i] %= 1000000;
}
/*s[i-1], s[i]두 자리 수 인 경우로 인식하여 개수 카운트*/
if (i == 1)
continue;
if (s[i-1] == '0') // 두 자리 중 앞자리가 0이면 두자리수가 아니므로 카운트할 필요가 없음
continue;
c = stoi(s.substr(i-1, 2));
if(10 <= c && c <= 26){
d[i] += d[i-2];
d[i] %= 1000000;
}
}
cout << d[s_len] << "\n";
}
# C
#include <cstring>
#include <cstdio>
int d[5001];
int mod = 1000000;
char s[5002];
int main() {
scanf("%s",s+1);
int n = strlen(s+1);
d[0] = 1;
for (int i=1; i<=n; i++) {
int x = s[i] - '0';
if (1 <= x && x <= 9) {
d[i] += d[i-1];
d[i] %= mod;
}
if (i==1) {
continue;
}
if (s[i-1] == '0') {
continue;
}
x = (s[i-1]-'0')*10 + (s[i]-'0');
if (10 <= x && x <= 26) {
d[i] += d[i-2];
d[i] %= mod;
}
}
printf("%d\n",d[n]);
return 0;
}
# Java
import java.util.*;
import java.math.*;
public class Main {
public static int mod = 1000000;
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine().trim();
int n = s.length();
s = " " + s;
int[] d = new int[n+1];
d[0] = 1;
for (int i=1; i<=n; i++) {
int x = s.charAt(i) - '0';
if (1 <= x && x <= 9) {
d[i] += d[i-1];
d[i] %= mod;
}
if (i==1) {
continue;
}
if (s.charAt(i-1) == '0') {
continue;
}
x = (s.charAt(i-1)-'0')*10 + (s.charAt(i)-'0');
if (10 <= x && x <= 26) {
d[i] += d[i-2];
d[i] %= mod;
}
}
System.out.println(d[n]);
}
}
반응형
'알고리즘 > 백준풀이6. 다이나믹프로그래밍' 카테고리의 다른 글
(20) [C++, Java] 백준 No.2225 : 합분해 (0) | 2019.05.17 |
---|---|
(19) [C++, Java] 백준 No.9461 : 파도반 수열 (0) | 2019.05.17 |
(18) [C++, Java] 백준 No.2133 : 타일 채우기 (0) | 2019.05.17 |
(17) [C++, Java] 백준 No.1699 : 제곱수의 합 (0) | 2019.05.17 |
(16) [C++, Java] 백준 No.2579 : 계단 오르기 (0) | 2019.05.16 |
Comments