Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 프론트엔드
- 멀티캠퍼스IT부트캠프
- 멀티캠퍼스IT부트캠프티
- 스레드
- git branch 협업
- 소수
- LG유플러스 유레카 프론트엔드
- 2775번 문제
- 유레카 부트캠프
- 시간 복잡도
- LG유플러스 유레카 부트캠프
- 백준
- 알고리즘
- 부트캠프후기
- 자바
- zod
- 정렬
- LG유플러스 유레카 3기 프론트엔드
- LG유플러스 유레카 프론트엔드 개발자
- Do it! 자료구조와 함께 배우는 알고리즘 입문
- 프로세스
- 웹시큐리티
- 별찍기10
- 프론트엔드 비대면반
- tanstack query
- 재귀
- Java
- 애자일
- 브루트포스
- 코딩
Archives
- Today
- Total
개발 일기
SW 5215 햄버거 다이어트 본문
문제 풀기에 앞서,
재귀함수로 설계하고 구현하는 데 어려움이 있어서 최대한 재귀함수로 구현하는 사고방식을 글로 적어 내려가면서 풀었다.
햄버거 다이어트
문제 설명
햄버거 재료에 대한 점수와 재료에 대한 칼로리가 주어졌을 때, 정해진 칼로리 이하의 조합 중에서 가장 선호하는 햄버거를 조합해주는 프로그램을 만드는 것이다.
입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 재료의 수, 제한 칼로리를 나타내는 N, L(1 ≤ N ≤ 20, 1 ≤ L ≤ 104)가 공백으로 구분되어 주어진다.
다음 N개의 줄에는 재료에 대한 민기의 맛에 대한 점수와 칼로리를 나타내는 Ti, Ki(1 ≤ Ti ≤ 103, 1 ≤ Ki ≤ 103)가 공백으로 구분되어 주어진다.
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 주어진 제한 칼로리 이하의 조합중에서 가장 맛에 대한 점수가 높은 햄버거의 점수를 출력한다.

분석 및 설계
점수와 칼로리를 각각 배열에 담아 인덱스로 값을 꺼내고 재귀식으로 함수를 호출해 가장 높은 점수를 체크해 출력해야될 것 같다.
가장 중요한 건 재귀 함수를 구현하는 것이다.
코드 구현
import java.util.Scanner;
public class SW5215_햄버거다이어트 {
static int[] scores;
static int[] calories;
static int N, L;
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++) {
N = sc.nextInt();
L = sc.nextInt();
scores = new int[N];
calories = new int[N];
for (int i = 0; i < N; i++) {
scores[i] = sc.nextInt();
calories[i] = sc.nextInt();
}
System.out.print("#" + test_case);
System.out.print(" " + hamburger(0, 0, 0));
}
}
private static int hamburger(int cnt, int tSum, int lSum) {
if (lSum > L) return 0;
if (cnt == N) return tSum;
int notTake = hamburger(cnt + 1, tSum, lSum);
int take = hamburger(cnt + 1, tSum + scores[cnt], lSum + calories[cnt]);
return Math.max(notTake, take);
}
}
아무 것도 고르지 않는 경우까지 갔다가 올라오면서 하나씩 고른 경우와 고르지 않은 경우를 비교하면서 가장 큰 값을 리턴한다.

'백준 문제풀이' 카테고리의 다른 글
| 백준 7568번 문제풀이 - 덩치 (0) | 2021.12.06 |
|---|---|
| 백준 2231번 문제풀이 - 분해합 (0) | 2021.12.02 |
| 백준 2447번 문제풀이 - 별찍기 - 10 (0) | 2021.12.01 |
| 백준 11729번 문제풀이 - 하노이 탑 이동 순서 (0) | 2021.11.30 |
| 백준 1018번 문제풀이 - 체스판 다시 칠하기 (0) | 2021.11.29 |
Comments