250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 모드코드
- 코테
- 마법사상어와 블리자드
- 대중음악화성
- 삼성SW Expert Academy
- Java
- 음악작곡기초
- 화음분석
- DP
- 공대생 자소서
- 음정이론
- 화성학응용
- 코드트리
- SW 직군
- syncroom
- 스케일분석
- ableton live 12
- code tree
- 알고리즘
- 취준
- 코딩테스트
- 모달진행
- mode chord
- 무료 악보 프로그램
- 코드차용
- 음계구조
- 삼성전자
- 드럼Tab악보
- 평행조
- 삼성기출
Archives
- Today
- Total
Code Beat
[Code Tree] 효율적으로 분배하기 본문
728x90
정수 n이 주어졌을 때, 5의 용량을 가진 상자와 3의 용량을 가진 상자에 나누어 담으려 합니다.
가장 적은 상자를 써서 n을 모두 분배한다고 할 때의 상자의 개수를 출력하는 프로그램을 작성해보세요.
입력 형식
첫 번째 줄에 n이 주어집니다.
- 3 ≤ n ≤ 5000
출력 형식
가장 적은 상자를 사용할 때의 상자의 개수를 출력합니다.
만약 n을 정확하게 모두 나눌 수 없다면 -1을 출력합니다.
#include <iostream>
using namespace std;
int dp[5010];
void init(){
for(int i = 0; i < 5010; i++) dp[i] = -1;
}
int main() {
init();
int n;
cin >> n;
dp[3] = 1;
dp[5] = 1;
for(int i = 3; i <= n; i++){
if(dp[i] != -1){
if(dp[i + 3] == -1 || dp[i + 3] > dp[i] + 1) dp[i + 3] = dp[i] + 1;
if(dp[i + 5] == -1 || dp[i + 5] > dp[i] + 1) dp[i + 5] = dp[i] + 1;
}
}
cout << dp[n];
return 0;
}
*박스, 동전 등등 일정한 단위를 가진 object로 어떤 정수를 가장 적은 숫자의 개수로 나누는 경우 dp이다.
*dp배열은 1차로 충분했고, n이 5000까지 이므로 여유롭게 5010으로 길이를 둬 out of index 에러를 방지했다.
728x90
'Code > Code Tree' 카테고리의 다른 글
[Code Tree] 범위 내의 소수 2 (0) | 2024.02.26 |
---|---|
[Code Tree] 거듭제곱을 출력하는 함수 (0) | 2024.02.26 |
[Code Tree] 더하기 사이클 (0) | 2024.02.25 |
[Code Tree] 1까지 나누는 재귀함수 (0) | 2024.02.25 |
[Code Tree] 삼성 SW 역량테스트 기출 풀이 (1) | 2024.02.17 |