티스토리 뷰

오르막수 문제 링크 : https://www.acmicpc.net/problem/11057

package upstair; import java.util.Scanner; public class Upstair { public static void main(String[] args) { int n,cnt,l=0; Scanner sc=new Scanner(System.in); n=sc.nextInt(); l=sc.nextInt(); int[][] d; d=new int[n][]; System.out.println(counting(n,l)); } public static int counting(int n, int l){ if(n==1){ int result=0; int rep=0; while(rep<=9){ result+=rep; rep+=1; } return result; }else{ return counting(n-1,l); } } }


[1차 풀이]
- N=1 일 때, 10+9+8+'''+1 까지 더해서 55개이다.
 - N=2 일 때, 10^2+9^2 이렇게 해서 제곱의 합을 한다
-N=3 일 때, 10^3+9^3을 해서 합한다.
--> 이러한 풀이는 동적으로 갯수를 계산하기 어렵다. 

[2차풀이]
- D[N][L]= N자리 오르막수의 마지막 수.
- D[N][L]=∑D[N-1][K] (0<=K<=L) 이런 공식이 나온다. 이렇게 되면 역발상으로 마지막 자리수부터 정하고 마지막 자리수 바로 전 숫자를 정하는 방식으로 해야한다. for문이 역으로 돈다.
- 재귀함수를 만들어야 한다.
-D[N][L]= ∑D[N-1][K]
-D[N-1][L]=∑D[N-2][K]
-D[N-2][L]=∑D[N-3][K] 이런식으로 계속 큰거에서 작은 것으로 가야 답을 구할 수 있다.


댓글