🌞Algorithm/🔥Baekjoon

[Baekjoon] 6187_Going to the Movies

뿌야._. 2025. 6. 16. 15:10
문제(출처: https://www.acmicpc.net/problem/6187)

< Going to the Movies >

 

문제 풀이 

 

소를 데려갈 수 있는 모든 경우의 수를 확인하며 그중에서 가장 무거운 소 그룹의 무게를 구한다.

 

my solution (Java)

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

public class _6187_ { // Going to the Movies
	static int result, C;
	static int[] arr;

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());

		C = Integer.parseInt(st.nextToken());
		int N = Integer.parseInt(st.nextToken());

		arr = new int[N];
		for (int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(bf.readLine());
		}

		result = 0;
		recursion(0, 0);

		System.out.println(result);
	}

	private static void recursion(int idx, int sum) {
		if (idx >= arr.length) {
			return;
		}
		if (sum + arr[idx] <= C) {
			result = Math.max(result, sum + arr[idx]);
			recursion(idx + 1, sum + arr[idx]);
		}
		recursion(idx + 1, sum);
	}
}
변수)
C, N : 트럭 용량, 소 마릿수
arr : 소 무게
result : 가장 무거운 소 그룹의 무게

 

트럭 용량과 소 마릿수를 입력받는다. N만큼 소 무게를 입력받아 배열 arr에 저장한다. recursion 함수를 호출한 후 가장 무거운 소 그룹의 무게 result를 출력한다.

 

recursion (int idx, int sum)

1) idx가 배열 길이보다 크다면 더 이상 계산할 것이 없으므로 종료

2) sum과 배열 idx번째 값의 합이 C 이하라면 소를 더 데려갈 수 있으므로 result를 최댓값으로 업데이트 및 recursion 함수 호출

3) idx번째 소를 데려가지 않는 경우를 구하기 위해 합을 구하지 않고 recursion 함수 호출