일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 카카오인코더
- 백트래킹
- retrofit
- Map
- c++
- 프로그래밍
- stl
- 스프링
- 스프링 프레임워크
- vue.js
- 안드로이드
- 인코더
- TensorFlow
- Android
- Kotlin
- git
- 연결리스트
- Rebase
- ADAS
- 프로그래머스
- 머신러닝
- c
- hackerrank
- 블로그개설
- BFS
- DP
- spring
- 스프링프레임워크
- python3
- Today
- Total
이것저것 공부한 기록
C++) 백준 2011번 풀이_암호코드 본문
https://www.acmicpc.net/problem/2011
문제 풀때 정답률을 딱히 살피지 않고 푸는 편인데
그랬어서 다행이다... ^^ 다시보니 19퍼센트네;; 도전도 안 했을듯
이게 그냥 보면 그냥... 앞에서부터 세어나가면 될 것 같은데
0이 들어가는 경우의 예외처리때문에 좀 생각이 복잡해졌다
테스트케이스 25114에서 대충 돌아가는 꼴을 보면
이렇게 증가하고,
그래서 이걸 간단하게 나타내보면
i-1자리랑 i자리랑 합쳐서 27보다 작으면
D[i] = D[i-1] + D[i-2]
해주고, 그 경우가 아니라면
D[i] = D[i-1]
그대로 내려오면 되는...듯해보이지만
0이 들어간다면?
인풋에 0이 들어가지 않을 거라고 지정되어 있는 것도 아니고,
심지어 암호가 잘못되어 암호를 해석할 수 없는 경우에는 0을 출력한다. 라고 친절하게 명시도 해두셨다.
그러므로 우리가 걸러야 할 경우를 간단하게 생각해보면
0
50
100
이 경우에는 절대 0이 나오고,
109는 1개밖에 안된다. 10, 9
일단 걸러야 하는게
인풋으로 0만 들어올 때,
중간에 0이 들어왓는데 앞 자리랑 합쳐서 10이나 20이 안 될 때.
돼서 넘어왔는데 다음이 0일때,
뭐 이런...
근데 이걸 결국 한번 더 걸러서 생각해보면
받은 수가 0보다 클 때 -> 앞의 자리수와 합쳐서 검사 안 해도 되니까 i-1을 더한다.
받은 수와 앞자리를 합쳐서 10보다 크고 26보다 작다 -> 앞의 자리수랑 합쳐서 생각해야되니까 i-2를 더한다
-> 두가지 모두 만족하지 못할 경우는 즉시 계산을 종료한다.
정도로 짜볼 수 있겠습니다~~~
이래저래 정리해서.. 코드를 짜면 됩니다.
더러워서 맘에 안들지만... 더 생각하기 싫었다.
#include<stdio.h>
int main(void) {
int cnt;
int pass[5001][2] = { 0, };
scanf("%1d", &pass[1][0]);
cnt = 1;
if (pass[1][0] != 0)
{
pass[1][1] = 1;
pass[0][1] = 1;
}
while(scanf("%1d", &pass[++cnt][0]) != EOF)
{
if (pass[cnt][0] > 0)
{
pass[cnt][1] = pass[cnt - 1][1];
}
if (pass[cnt - 1][0] * 10 + pass[cnt][0] < 27 &&
pass[cnt - 1][0] * 10 + pass[cnt][0] >= 10)
{
pass[cnt][1] += pass[cnt - 2][1];
}
pass[cnt][1] %= 1000000;
if (pass[cnt][1] == 0)
{
cnt++;
break;
}
}
printf("%d", pass[cnt-1][1]);
}
'Study > 프로그래밍 문제풀이' 카테고리의 다른 글
C++) 프로그래머스 문제 풀이_다음 큰 숫자 (0) | 2019.10.24 |
---|---|
C++) 프로그래머스 문제 풀이_콜라스 추측 (0) | 2019.10.24 |
C++) 백준 2133번 풀이_타일 채우기 (0) | 2019.10.23 |
C++) 백준 1699번 풀이_제곱수의 합 (0) | 2019.10.23 |
C++) 백준 2156번 풀이_포도주 시식 (0) | 2019.10.20 |