일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 국가직
- 퇴사후공무원
- 성북구맛집
- 통영에어비앤비
- gradle
- 돈암동맛집
- 성신여대맛집
- JavaScript
- 파이썬
- 한남동맛집
- ubuntu자바설치
- 한성대맛집
- tomcat7
- 성신여대편백집
- 방이편백육분삼십성신여대
- 영화추천
- 자바스크립트에러처리
- react
- 방이편백육분삼십
- ELK
- 스페인여행
- 통영예쁜카페
- 뚝섬역맛집
- springboot
- 통영
- 통영여행
- 꼴뚜기회
- npm
- 공무원
- 서울숲누룽지통닭구이
- Today
- Total
코린이의 기록
[BOJ] 11052 - 붕어빵 판매하기 본문
1. 알고리즘
DP문제
2. 전체 소스
4
1 5 6 7 일 경우를 예로들면,
arr 배열에는 각각 n개 붕어빵을 팔 때 가장 비싸게 팔 수 있는 값을 넣을 것이다.
arr[0] 은 n=0으로, 0개의 붕어빵을 팔았을때 값이므로 0으로 초기화 하였다.
arr[1] = arr[0] + v[0];
1) 붕어빵 1개를 팔았을 때
Case 1 : 0개를 팔았을 때 + 1개의 가격 => arr[1] = 1
arr[1] = 1
arr[2] = arr[0] + v[1];
arr[2] = arr[1] + v[0];
2) 붕어빵 2개를 팔았을 때
Case 1 : 1개을 팔았을 때 + 1개 => arr[2] = 2
Case 2 : 2세트를 판다. (=0개를 팔았을 때 + 2개를 더 팔면 된다.) => arr[2] = 5
Case 1과 Case2 중에서 더 큰 값을 배열에 저장한다.
arr[2] = 5
arr[3] = arr[0] + v[2];
arr[3] = arr[1] + v[1];
arr[3] = arr[2] + v[0];
3) 붕어빵 3개를 팔았을 때
Case 1 : 1개 팔았을 때 + 2개를 더 팔면된다. => arr[3] = 6
Case 2 : 2개 팔았을 때 + 1개를 더 팔면된다. => arr[3] = 6
Case 3 : 3세트를 판다. (=0개를 팔았을 때 3개를 더 팔면 된다.) => arr[3] = 6
Case 1과 Case2, Case3 중에서 더 큰 값을 배열에 저장한다.
arr[3] = 6
arr[4] = arr[0] + v[3];
arr[4] = arr[1] + v[2];
arr[4] = arr[2] + v[1];
arr[4] = arr[3] + v[0];
4) 붕어빵 4개를 팔았을 때
Case 1 : 1개를 팔았을 때 + 3개를 더 팔면 된다 => arr[4] = 8
Case 2 : 2개를 팔았을 때 + 2개를 더 팔면 된다 => arr[4] = 10
Case 3 : 3개를 팔았을 때 + 1개를 더 팔면 된다 => arr[4] = 8
Case 4 : 4세트를 판다. (=0개를 팔았을 때 4개를 더 팔면 된다.) => arr[4] = 7
Case 1과 Case2, Case3, Case4 중에서 더 큰 값을 배열에 저장한다.
arr[4] = 10
3. 참고 사항
위 소스 대신에
max함수를 사용했을때는 결과로 컴파일 에러가 떴다. (c++ 11)
원인은 뭔지 모르겠다.
4. 문제
백준 알고리즘 : https://www.acmicpc.net/problem/11052
'c&c++ > 백준' 카테고리의 다른 글
[BOJ] 9095 - 1,2,3 더하기 (C++) (0) | 2018.05.08 |
---|---|
[BOJ] 11727 - 타일링2 (C++) (0) | 2018.05.08 |
[BOJ] 1463 - 1로 만들기 (C++) (0) | 2018.05.08 |
[BOJ] 1697 - 숨바꼭질 (C++) (0) | 2018.05.08 |
[BOJ] 10971 - 외판원 순회2 (C++) (0) | 2018.05.08 |