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
- greedy
- 네트워크
- 브루트포스
- 동적계획법
- 해시
- dynamic programming
- 그리디
- 백준
- DP
- boj
- 이분탐색
- switch
- DFS
- 알고리즘
- programmers
- Algorithm
- Spring
- 구현
- 프로그래머스
- 스프링
- Network
- Backtracking
- broadcast
- 백트래킹
- 너비우선탐색
- 해시맵
- BFS
- DynamicProgramming
- 깊이우선탐색
- HashMap
Archives
- Today
- Total
옌의 로그
[Algorithm] 백준 - 설탕 배달 (2839번) 본문
문제
[백준] 설탕 배달
(Contest > Croatian Open Competition in Informatics > COCI 2010/2011 > Contest #7 1번)
사용 알고리즘
- 동적계획법 (Dynamic Programming)
해결방법
- 동전으로 금액을 만드는 문제와 같다고 보면 된다.
- > 3과 5를 가지고 N키로 만들기
- $dp[N] = 사용한 최소 동전(설탕 봉지) 수
- $dp 배열을 0으로 초기화 해준 뒤 반복문을 돌면서 채워주면 되는데, 이 때 3, 5 번째는 각 각 1개의 봉지 만으로 만들 수 있기 때문에 1로 갱신, 4의 경우 만들 수 없는 숫자기 때문에 0으로 갱신해준다.
- $dp[$i-3], $dp[$i-5] 의 값이 모두 있는 경우 (0보다 큰 경우)
- 최소 값에 1을 더해주면 된다.
- $dp[$i-3], $dp[$i-5] 중 하나만 값이 있는 경우,
- 둘 중 하나는 0이므로 둘을 더 했을 때 0 이상의 값이면 해당 값에 +1을 해주면 되고, 아닌 경우 둘 다 갈 수 없는 경로란 의미이므로 0을 넣어준다
소스코드
사용언어 : php
<?
fscanf(STDIN,"%d",$N);
$dp = [];
$dp = array_fill(0, $N, 0); // [돈] = 최소 동전수
$dp[3] = 1;
$dp[4] = 0;
$dp[5] = 1;
for($i = 6; $i <= $N; $i++){
if ($dp[$i-3] && $dp[$i-5]) {
$dp[$i] = min($dp[$i-3], $dp[$i-5]) + 1;
} else {
$dp[$i] = ($dp[$i-3] + $dp[$i-5]) ? ($dp[$i-3] + $dp[$i-5]) + 1 : 0;
}
}
echo $dp[$N] ?: -1;
?>
php standard I/O
https://www.php.net/manual/en/features.commandline.io-streams.php
한줄평
백준엔 php 런타임이 있다! ㅠㅠ
'스터디 > 알고리즘' 카테고리의 다른 글
[Algorithm] 백준 - IF문 좀 대신 써줘 (19637번) (0) | 2023.05.04 |
---|---|
[Algorithm] 백준 - 크림 파스타 (25214번) (2) | 2023.04.16 |
[Algorithm] 프로그래머스 - 호텔 대실 (0) | 2023.04.01 |
[Algorithm] 프로그래머스 - 게임 맵 최단거리 (0) | 2023.03.22 |
[Algorithm] 프로그래머스 - N으로 표현 (0) | 2023.03.21 |
Comments