본문 바로가기
코딩테스트

[백준] 1423번 '원숭이 키우기' - Java

by CuckooBird 2023. 8. 7.

https://www.acmicpc.net/problem/1423

 

1423번: 원숭이 키우기

첫째 줄에 캐릭터의 최대 레벨 N(1 ≤ N ≤ 50)이 주어진다. 둘째 줄에는 해빈이가 가지고 있는 캐릭터의 수가 각 레벨 별로 주어진다. 셋째 줄에는 캐릭터의 힘이 각 레벨 별로 주어진다. 각 레벨

www.acmicpc.net


문제


코드

import java.io.*;
import java.util.*;

public class Main {
	private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	
	public static void main(String[] args) throws IOException {
		int n = Integer.parseInt(bf.readLine());
		
		int[] level_num = new int[n + 1];
		int[] strength = new int[n + 1];
		StringTokenizer st = new StringTokenizer(bf.readLine());
		for(int i = 1 ; i <= n ; i++) {
			level_num[i] = Integer.parseInt(st.nextToken());
		}
		st = new StringTokenizer(bf.readLine());
		for(int i = 1 ; i <= n ; i++) {
			strength[i] = Integer.parseInt(st.nextToken());
		}
		
		int d = Integer.parseInt(bf.readLine());
		
		long initial = 0;
		for(int i = 1 ; i <= n ; i++) {
			initial += (long) level_num[i] * strength[i];
			level_num[i] = Math.min(d, level_num[i]);
		}
		
		long[] dp = new long[d + 1];
		
		for(int i = 1 ; i <= n ; i++) {
			while(level_num[i] > 0) {
				for(int j = d ; j >= 0 ; j--) {
					for(int k = i + 1 ; k <= n && k + j - i <= d ; k++) {
						dp[k + j - i] = Math.max(dp[k + j - i], dp[j] + strength[k] - strength[i]);
					}
				}
				level_num[i]--;
			}
		}
		
		bw.write((initial + dp[d]) + "\n");
		
		bf.close();
		bw.flush();
		bw.close();
	}
}

Search

https://github.com/co-re-study/co-re-study/blob/a5af0d943df816871a07cc94618b0b7b0b25b628/50/%EC%9B%90%EC%88%AD%EC%9D%B4%20%ED%82%A4%EC%9A%B0%EA%B8%B0/%EC%9C%A4%EC%84%B1%EC%9A%B4.py


후기

이런 날씨에 코테를 하자니 수증기가 될 뻔했습니다. 실제로 수증기가 됐다가 기적적으로 응고되어 돌아올 수 있었습니다 ;; (더워서 헛소리 중)

더위 조심하세요 다들..