뚱땅뚱땅

[문제] 코드업 1930번 supersum- 메모이제이션으로 풀기 본문

알고리즘/백준

[문제] 코드업 1930번 supersum- 메모이제이션으로 풀기

양순이 2021. 1. 19. 07:47
728x90

메모이제이션 기법을 처음 알았다!! 이해하는데 좀 걸렸다.

코드업 1930번 문제

import java.util.Scanner;

public class supersum {	
	public static void main(String[] args) {
		int memo[][] = new int[15][15];
		
		Scanner sc = new Scanner(System.in);
		int k,n;
		
		while(sc.hasNextInt()) {
			k = sc.nextInt();
			n = sc.nextInt();
			init(memo);
			
			System.out.println(func(k,n,memo));
		}
	}
	static int func(int k, int n, int[][] m) {
		int result = 0;
		
		if(m[k][n]>0) return m[k][n];
		else {
			for(int i=1;i<=n;i++) {
				result += func(k-1, i, m);
			}
			m[k][n] = result;
			return result;
		}
		
	}
	static void init(int m[][]) {
		for(int i=0;i<15;i++) {
			for(int j =0;j<15;j++) {
				if(i==0) m[0][j] = j;
				else m[i][j] = 0;
			}
		}
	}
}

func()에서 result 변수를 선언하지 않고 m[k][n] += func(k-1, i, m)으로 계산해서 계속 틀렸었다.

728x90
Comments