📌 고정 게시글

📢 공지합니다

이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.

최코딩의 개발

[백준 11052번] 카드 구매하기 본문

코딩테스트/백준

[백준 11052번] 카드 구매하기

seung_ho_choi.s 2025. 3. 25. 23:13
728x90

https://www.acmicpc.net/problem/11052

 

import java.io.*;
import java.util.*;

public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] p = new int[N + 1];
        int[] dp = new int[N + 1];
        StringTokenizer st =new StringTokenizer(br.readLine());
        for (int i = 1; i <= N; i++) {
            p[i] = Integer.parseInt(st.nextToken());
        }

        dp[1] = p[1];

        for(int i=2; i<N+1; i++){
            for(int j=0; j<i+1; j++){
                dp[i] = Math.max(dp[i], dp[j]+p[i-j]);
            }
        }

        System.out.println(dp[N]);
    }
}

 

풀이는 간단하다. 

 

N=2 라고 가정했을때 1개짜리 + 1개짜리, 0개짜리 + 2개짜리 이렇게 나눠진다. 그럼 이 들을 점화식으로 계산해보면 

dp[j] + p[i-j] 로나오게 된다.  이떄 dp[i] 랑 max 비교해서 최대값을 넣어주면서 계사하면 끝난다.

728x90

'코딩테스트 > 백준' 카테고리의 다른 글

[백준 3190번] 뱀  (0) 2025.04.01
[백준 2805번] 나무 자르기  (0) 2025.04.01
[백준 2156번] 포도주 시식  (0) 2025.03.25
[백준 15666번] 로봇 조종하기  (0) 2025.03.24
[백준 15666번] N과 M(12)  (0) 2025.03.23