본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 7579번] 앱(JAVA)

by 테크케찰 2020. 9. 15.

www.acmicpc.net/problem/7579

 

7579번: 앱

입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활��

www.acmicpc.net

import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Main{
	
	static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
	static StringBuilder sb=new StringBuilder();
	static int N, M;
	static int[] m, c;
	static int answer=Integer.MAX_VALUE;
	
	public static void main(String args[]) throws Exception {
		String s[]=br.readLine().split(" ");
		N=Integer.parseInt(s[0]);
		M=Integer.parseInt(s[1]);
		m=new int[N];
		c=new int[N];
		String s1[]=br.readLine().split(" ");
		String s2[]=br.readLine().split(" ");
		for(int i=0;i<N;i++) {
			m[i]=Integer.parseInt(s1[i]);
			c[i]=Integer.parseInt(s2[i]);
		}
		int dp[][]=new int[N][100001];
		for(int i=0;i<N;i++) {
			int cost=c[i];
			int memory=m[i];
			for(int j=0;j<=10000;j++) {
				if(i==0) {
					if(j>=cost)	dp[i][j]=memory;
				}
				else {
					if(j>=cost)	dp[i][j]=Math.max(dp[i-1][j-cost]+memory, dp[i-1][j]);
					else dp[i][j]=dp[i-1][j];
				}
				if(dp[i][j]>=M) answer=Math.min(answer, j);		
			}
		}
		System.out.println(answer);
	}
}

아래 블로그 링크를 참고하여 문제를 풀어보았습니다.

dragon-h.tistory.com/9

 

[백준 7579 : JAVA] 앱 / Dynamic Programming

개요 전형적인 dp문제로 dp배열을 선언하여 풀이할 수 있다. 처음에 문제를 접근 할 때 메모리값을 dp[][] 배열의 인덱스로 잡으면 메모리초과가 난다는 것을 인지하고 비용을 기준으로 잡고 문제�

dragon-h.tistory.com