반응형
- string 이용 : #include <string>
문제 풀이
int num2011_secretcode()
{
int len = 0;
string str;
cin >> str;
len = str.size();
//1) 암호가 잘못된 경우 반환
//if(len>5000){ cout << 0; return 0;}
//2) 암호가 잘못된 경우 이어감
if(len>5000)
{
str[4999] = NULL;
len = 5000;
}
int *strArr = new int[len+1];
memset(strArr,0,sizeof(int*)*(len+1));
int num = 0;
int validnum = 0;
//기본값과 한자리 수 일때는 1 fix
strArr[0] = strArr[1] = 1;
//인덱스 맞추기위한 쓸데없는 값 넣기
str = " " + str;
//첫번째 글자 확인 시작부터 암호 아니면 잘가라
if(str[1]-'0' > 0 && str[1]-'0' < 10){
for(int i = 2; i<=len; i++)
{
num = str[i]-'0';
//1) 정상 범주 내의 숫자
if(num > 0 && num < 10) {
//분리된 알파벳(default)
strArr[i] = strArr[i-1];
validnum = (str[i-1]-'0') * 10 + num;
//알파벳 범주안에 드는지 확인
//이전 분리된 숫자와 합칠 수 있음(분리되어있던 케이스들 합쳐야함)
if(validnum > 0 && validnum <=26)
strArr[i] += strArr[i-2];
strArr[i] %= mod;
}
//2) 0인 경우 앞의 분리된 숫자와 합치기
else if(num == 0)
{
validnum = (str[i-1]-'0') * 10 + num;
if(validnum > 0 && validnum <=26)
{
strArr[i] = strArr[i-2];
}
}
//3) 갑분 이상한 문자 -> 암호 불가
else break;
}
}
cout << strArr[len];
strArr = NULL;
delete strArr;
return 0 ;
}
백준알고리즘 난이도... 안풀다 풀어서 그런가
봐도봐도 이해 잘 안됨 ㅠㅠ...
알듯말듯한데 그냥 돌아다니는 소스답 보고 원리 찾아서 구현함
1. 문자형의 숫자 - '0' 하면 숫자가 되버림
2. string 엄청 편함. c언어에서는 지원 안되므로 cin cout 쓸것
- strArr[1] 은 첫번째 문자에 대한 경우의 수
- str[1]은 첫번째 문자
정말 피보나치 수열이 생각나는 문제였다........ 다음에 꼭 다시풀어보기
728x90
반응형
'개발아닌개발 > 알고리즘문제풀이' 카테고리의 다른 글
[백준 알고리즘] 15954번 문제 인형들 (0) | 2021.11.08 |
---|
댓글