11057:오르막수
https://www.acmicpc.net/problem/11057
풀이
이차원 배열로 생각
식 세우기 … 다음과 같이 시도했지만 정답 도출 실패..
==> 답지 보고 다시 풀 예정
1 | int d[n][l] : 자리수가 n 자리인 수의 마지막 수가 l인 오르막 수의 개수 |
https://www.acmicpc.net/problem/11057
이차원 배열로 생각
식 세우기 … 다음과 같이 시도했지만 정답 도출 실패..
==> 답지 보고 다시 풀 예정
1 | int d[n][l] : 자리수가 n 자리인 수의 마지막 수가 l인 오르막 수의 개수 |
https://www.acmicpc.net/problem/10844
직접
길이가 1인 계단수
길이가 2인 계단수
…
를 하나하나 구해보니
길이가 n인 계단 수 = 길이가 n-1인 계단수 * 2 -1 이라는 규칙이 나왔다.
하지만 계속 채점 결과는 틀렸다고 나옴..
이차원 배열로 품
* D[i][j] : 길이 i, 마지막 숫자가 j인 계단 수의 개수
* D[N][L] : N자리 계단수 마지막수는 L인 계단수의 개수
* D[N][L] = D[N-1][L-1] + D[N-1][L+1] (L : 1~8)
* D[N][0] = D[N][1]
* D[N][9] = D[N-1][8]
https://www.acmicpc.net/problem/9095
재귀로 푸니 또 다시 런타임 에러.
그래서 재귀로 풀지 않음
핵심 : 가장 마지막에 1을 더하거나, 2를 더하거나, 3을 더하건
d[n] = d[n-1] + d[n-2] + d[n-3]
https://www.acmicpc.net/problem/1463
D[N] = N을 1로 만드는데 필요한 연산의 최솟값
N
-> N-3 -> ….. > 1 : 1 + D[N/3] ====1번
-> N-2 -> ….. > 1 : 1 + D[N/2] ====2번
-> N-1 -> ….. > 1 : 1 + D[N/1] ====3번
D[N] = min(1번, 2번, 3번)
DP : 어떤 상황에서 할수 있는 상황 모두 살펴보고 거기서 가장 좋은것 선택
Greedy : 할수 있는 선택 중에 제일 좋다고 생각되는 것 하나 선택해서 정답 찾아감
1 | ex) 12원을 1, 4, 5원으로 거슬러 줄 때, |
지금 이 순간 가장 좋은 경우 선택하는 것이 최적일 때.
왜 그게 최적인지 증명해야함
그래서 가장 어려워
그래서 시험이나 대회에 나오면 가장 나중에 풀어
자연수 N이 주어지면,
N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한사항
* N의 범위 : 100,000,000 이하의 자연수 <br>
<입출력 예>
N — answer
123 — 6
987 — 24
입출력 예 설명
입출력 예 #1
문제의 예시와 같습니다.
입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.
정수형으로 입력 받음
입력 받음 정수형을 문자열형으로 변환 ( 자릿수 구하기 용이하기 때문 )
chatAt(i) 번째 - ‘ 0 ‘ 을 하면 그 자릿수가 나옴
각각 더하면 결과값 나옴
987이 입력되면
‘9’ - ‘0’ = 57 - 48 = 9
https://www.acmicpc.net/problem/1260