• 생각

먼저 1번부터 N번째 입력했을때 최댓값의 메모를위한 dp[N+1]부터 만들어 놓자.

 

N번째의 입력은 1번째버튼을 입력하거나 4번째 버튼을 입력해야한다.

1번째 입력을 했다 가정하고 dp[i]=dp[i-1]로 초기화를 한다.

4번째 버튼을 입력할땐 몇번 연속 4번째 버튼을 입력하였는지가 중요하다.

왜냐하면 4번째 버튼을 처음 입력하기 2개전의 값이 버퍼에 복사되고 

dp[i]=dp[k]*(4번째버튼 입력횟수+1)이 되기 때문이다.

 

  • 코드

정답 코드 : 점화식을 찾아 구현하였다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static int N;
	static long[] dp;

	public static void main(String[] args) throws Exception {
		SetData();
		FindMaxValue();
		System.out.println(dp[N]);
	}

	private static void SetData() throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		N = Integer.parseInt(br.readLine());
		dp = new long[101];
	}

	public static void FindMaxValue() {
		for(int i = 1; i <= N; i++) {
			dp[i]=dp[i-1]+1;
			for(int j = 1; j <= i - 3; j++) {
				dp[i] = Math.max(dp[i], (j+1)*dp[i-(j+2)]);
			}
		}
	}

}

'algorithm' 카테고리의 다른 글

[JAVA] 백준 2981번 : 검문  (0) 2020.12.21
[JAVA] 백준 1739번 : 타일링  (0) 2020.12.18
[JAVA] 백준 11047번 : 동전 0  (0) 2020.12.17
[JAVA] 백준 16120번 : PPAP  (0) 2020.12.17
[JAVA] 백준 6588번 : 골드바흐의 추측  (0) 2020.12.16

+ Recent posts