SW Expert Academy 5215번 햄버거 다이어트 | Java
🔎 문제 설명
💙 D3
- 난이도 ★★☆☆ - 조합 - DP 동적 프로그래밍
이 문제는 조합과 동적 프로그래밍 2가지 방법으로 풀 수 있다.
최근에 재귀로 조합을 찾아내는 법을 배웠기 때문에 이걸 이용한 자바 코드를 올리고자 한다. 원래는 자바 입출력도 버거웠는데 이론을 탄탄하게 들으며 많이 배우고 있는 요즘이다. 코드에 대한 설명은 주석으로 대신 하겠다. DP로도 풀 수 있는데 헷갈렸던 기억이 난다. 자바로 다시 한 번 풀어서 아래에 첨부할 예정이다.
💻 내 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static int N, L, answer;
static int[] tastes, calories;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int t=1;t<T+1;t++){
sb.append("#").append(t).append(" ");
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
L = Integer.parseInt(st.nextToken());
tastes = new int[N];
calories = new int[N];
for (int n=0;n<N;n++) {
st = new StringTokenizer(br.readLine());
tastes[n] = Integer.parseInt(st.nextToken());
calories[n] = Integer.parseInt(st.nextToken());
}
answer = 0;
findBestCombi(0,0,0);
sb.append(answer).append("\n");
}
System.out.println(sb);
}
public static void findBestCombi(int depth, int totalTaste, int totalCal){
if (totalCal > L) return;
if (depth == N) {
// 제한 칼로리를 넘지 않고 끝까지 돌았다면, 기존값과 비교해 최고 점수 갱신!
answer = Math.max(answer, totalTaste);
return;
}
// 해당 재료를 고르면
findBestCombi(depth+1, totalTaste+tastes[depth], totalCal+calories[depth]);
// 해당 재료를 고르지 않으면
findBestCombi(depth+1, totalTaste, totalCal);
}
}
💙 You need to log in to GitHub to write comments. 💙
If you can't see comments, please refresh page(F5).