-
[11052] 카드 구매하기 - Java알고리즘 연습 2022. 3. 14. 15:17
1. 문제
https://www.acmicpc.net/problem/11052
11052번: 카드 구매하기
첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)
www.acmicpc.net
2. 풀이
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { // 1. Read all cards BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] arr = new int[N + 1]; int[] maxArr = new int[N + 1]; StringTokenizer st = new StringTokenizer(br.readLine(), " "); for (int i = 1; i <= N; i++) { arr[i] = Integer.parseInt(st.nextToken()); } // 2. Find the maxCost to have n cards maxArr[0] = 0; System.out.println(maxArr[1]); for (int j = 1; j <= N; j++) { for (int k = 1; k <= j; k++) { maxArr[j] = Math.max(maxArr[j], maxArr[j - k] + arr[k]); } } // 3. Print answer System.out.println(maxArr[N]); } }
3. 배운점
카드 선택 방법을 분석 가능한 작은 단위로 쪼갤 수 있어야 한다.
4. 개선할 점
풀이 오류 지적, 다른 접근법 공유, 그 밖에 질문 등 모든 의견을 환영합니다.
'알고리즘 연습' 카테고리의 다른 글
[1003번] 피보나치 함수 - Java (0) 2022.03.18 [11057] 오르막수 - Java (0) 2022.03.15 [9095] 1,2,3 더하기 - Java (0) 2022.03.09 [1463] 1로 만들기 - Java (0) 2022.03.08 [17087] 숨바꼭질-6 -Java (0) 2022.02.23