b11052. 카드 구매하기

2025. 6. 5. 16:30·Algorithm & Data Structures/BOJ

 

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

 

 

 

✨ 자바로 푸는 카드 구매하기 문제 풀이

 


 

📌 문제 개요

 

  • N개의 카드를 구매해야 할 때, 각 카드팩은 카드 개수와 가격이 다르다.
  • 카드 N개를 구매하는 최대 금액을 구해야 한다.
  • 전형적인 완전 탐색 기반의 DP 최적화 문제.

 


 

💡 예제 입력

4  
1 5 6 7

설명:

카드 1개짜리 팩은 1원, 2개짜리 팩은 5원, …

4개를 구매할 때 최대 금액을 구하는 문제.

 


 

🛠 알고리즘 접근 방식

 

  1. dp[i]는 카드 i개를 구매할 수 있는 최대 비용을 의미.
  2. i장을 구매하려면:
    • j장을 먼저 사고, 나머지 i-j장을 다시 구입할 수 있다.
    • 즉, dp[i] = max(dp[i], dp[i-j] + price[j])
  3.  
  4. 이때 모든 j에 대해 반복하면서 최대값 갱신.

 


 

✅ 핵심 아이디어

 

  • 점화식:
dp[i] = max(dp[i], dp[i - j] + price[j])

 

  •  
  • 완전 탐색하면서 dp 배열을 갱신.

 


 

🧾 코드 해설

 

 

🎯 입력 및 초기화

int N = Integer.parseInt(br.readLine());
int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int[] dp = new int[N+1];
for (int i = 1; i <= N; i++) {
    dp[i] = arr[i-1];
}

 

  • arr[i-1]은 i장을 사는 카드팩 가격.
  • dp[i] = arr[i-1]은 해당 카드팩을 단독으로 구매했을 경우를 초기값으로 세팅.

 


 

🔁 점화식 구현

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

 

  • i장을 만들기 위해 j장 + (i-j)장으로 나누어보며 최대값 갱신.

 


 

✅ 핵심 포인트 정리

 

  • 카드 구매를 나누어 계산해야 하는 부분 문제 최적화 유형.
  • dp[i] = max(dp[i], dp[i-j] + dp[j])을 잘 이해하는 것이 핵심.
  • 전형적인 1차원 DP 누적 최적화 문제.

 

 

 

'Algorithm & Data Structures > BOJ' 카테고리의 다른 글

b11057. 오르막수  (0) 2025.06.23
b6497. 전력난  (0) 2025.06.23
b2193. 이친수  (0) 2025.06.04
b14501. 퇴사  (1) 2025.06.04
b11062. 카드 게임  (0) 2025.06.04
'Algorithm & Data Structures/BOJ' 카테고리의 다른 글
  • b11057. 오르막수
  • b6497. 전력난
  • b2193. 이친수
  • b14501. 퇴사
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (331) N
      • Algorithm & Data Structures (249)
        • BOJ (107)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (29) N
        • SQL (23) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dfs
    구현
    DynamicProgramming
    알고리즘
    후위순회
    스택
    algorithm
    경로압축
    Stack
    PriorityQueue
    백트래킹
    dp
    Union-Find
    자바
    binarySearch
    BFS
    백준
    programmers
    골드
    유니온파인드
    이분탐색
    프로그래머스
    baekjoon
    동적계획법
    다익스트라
    SQL
    투포인터
    Java
    Dijkstra
    전위순회
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
b11052. 카드 구매하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.