KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (486)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (431)
      • 백준 (187)
      • Programmers (104)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • string
  • js
  • 문자열
  • recursion
  • C
  • 그래프
  • Level 2
  • 제코베 JS 100제
  • programmers
  • 다이나믹 프로그래밍
  • 수학
  • Level1
  • Level 0
  • codeup
  • C++
  • tree
  • 정렬
  • 백준
  • LeetCode
  • Level 1

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun
PS/백준

백준 / 다이나믹 프로그래밍 / 16194번 / 카드 구매하기 2 / C++

PS/백준

백준 / 다이나믹 프로그래밍 / 16194번 / 카드 구매하기 2 / C++

2021. 8. 21. 12:08

문제

요즘 민규네 동네에서는 스타트링크에서 만든 PS카드를 모으는 것이 유행이다.

PS카드는 PS(Problem Solving)분야에서 유명한 사람들의 아이디와 얼굴이 적혀있는 카드이다.

각각의 카드에는 등급을 나타내는 색이 칠해져 있고, 다음과 같이 8가지가 있다.

  • 전설카드
  • 레드카드
  • 오렌지카드
  • 퍼플카드
  • 블루카드
  • 청록카드
  • 그린카드
  • 그레이카드

카드는 카드팩의 형태로만 구매할 수 있고, 카드팩의 종류는 카드 1개가 포함된 카드팩, 카드 2개가 포함된 카드팩, ...

카드 N개가 포함된 카드팩과 같이 총 N가지가 존재한다.

민규는 지난주에 너무 많은 돈을 써 버렸다. 그래서 오늘은 돈을 최소로 지불해서 카드 N개를 구매하려고 한다.

카드가 i개 포함된 카드팩의 가격은 Pi원이다.

예를 들어, 카드팩이 총 4가지 종류가 있고, P1 = 1, P2 = 5, P3 = 6, P4 = 7인 경우에 민규가 카드 4개를 갖기 위해

지불해야 하는 금액의 최솟값은 4원이다. 1개 들어있는 카드팩을 4번 사면 된다.

P1 = 5, P2 = 2, P3 = 8, P4 = 10인 경우에는 카드가 2개 들어있는 카드팩을 2번 사면 4원이고,

이 경우가 민규가 지불해야 하는 금액의 최솟값이다.

카드 팩의 가격이 주어졌을 때,

N개의 카드를 구매하기 위해 민규가 지불해야 하는 금액의 최솟값을 구하는 프로그램을 작성하시오.

N개보다 많은 개수의 카드를 산 다음, 나머지 카드를 버려서 N개를 만드는 것은 불가능하다.

즉, 구매한 카드팩에 포함되어 있는 카드 개수의 합은 N과 같아야 한다.

입력

첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000)

둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)

출력

첫째 줄에 민규가 카드 N개를 갖기 위해 지불해야 하는 금액의 최솟값을 출력한다.

 

더보기

예제 입력 1 

4

1 5 6 7

예제 출력 1 

4

예제 입력 2 

5

10 9 8 7 6

예제 출력 2 

6

예제 입력 3 

10

1 1 2 3 5 8 13 21 34 55

예제 출력 3 

5

예제 입력 4 

10

5 10 11 12 13 30 35 40 45 47

예제 출력 4 

26

예제 입력 5 

4

5 2 8 10

예제 출력 5 

4

예제 입력 6 

4

3 5 15 16

예제 출력 6 

10

 

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1e3 + 1;
int p[N];
int dp[N];

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	
	int n;
	cin >> n;
	
	for(int i=1; i<=n; i++) {
		cin >> p[i];
	}
	
	for(int i=1; i<=n; i++) {
		dp[i] = p[i];
		for(int j=1; j<i; j++) {
			dp[i] = min(dp[i], dp[i-j] + p[j]);
		}
	}
	
	cout << dp[n] << '\n';
	
	return 0;
}

풀이방법은 카드 구매하기(1)를 풀었다면 최댓값에서 최소값으로 바뀐것밖에 없으므로 아주 쉽게 할 수 있다.

2021.08.20 - [ALGORITHM/백준] - 백준 / 다이나믹 프로그래밍 / 11052번 / 카드 구매하기 / C++

 

백준 / 다이나믹 프로그래밍 / 11052번 / 카드 구매하기 / C++

문제 요즘 민규네 동네에서는 스타트링크에서 만든 PS카드를 모으는 것이 유행이다. PS카드는 PS(Problem Solving)분야에서 유명한 사람들의 아이디와 얼굴이 적혀있는 카드이다. 각각의 카드에는 등

jun-coding.tistory.com

 

다만 주의해야할 점은 dp 배열이 0으로 모두 초기화가 되어있기때문에 min으로 비교하게되면 무조건 0이나온다.

따라서 반복문에서 dp[i]의 값은 p[i]으로 할당을 해준뒤 비교를 해야한다.

저작자표시 (새창열림)

'PS > 백준' 카테고리의 다른 글

백준 / 다이나믹 프로그래밍 / 10844번 / 쉬운 계단 수 / C++  (0) 2021.08.25
백준 / 다이나믹 프로그래밍 / 15990번 / 1, 2, 3 더하기 5 / C++  (0) 2021.08.24
백준 / 다이나믹 프로그래밍 / 11052번 / 카드 구매하기 / C++  (0) 2021.08.20
백준 / 다이나믹 프로그래밍 / 9095번 / 1, 2, 3 더하기 / C++  (0) 2021.08.18
  • 문제
  • 입력
  • 출력
'PS/백준' 카테고리의 다른 글
  • 백준 / 다이나믹 프로그래밍 / 10844번 / 쉬운 계단 수 / C++
  • 백준 / 다이나믹 프로그래밍 / 15990번 / 1, 2, 3 더하기 5 / C++
  • 백준 / 다이나믹 프로그래밍 / 11052번 / 카드 구매하기 / C++
  • 백준 / 다이나믹 프로그래밍 / 9095번 / 1, 2, 3 더하기 / C++
KimMinJun
KimMinJun

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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