문제
https://www.acmicpc.net/problem/1463
코드
1년전에는 Dynamic Programming에 대해서 아는 것이 없었다. 처음에는 반복문을 통해서 C++로 풀었다. 물론 틀렸다!🤦🏻♀️
이 문제는 DP로 Bottom-up 방식으로 풀어야한다.
Swift로 작성한 코드는 다음과 같다.
import Foundation
//1463
var num = Int(readLine()!)
var list = [Int](repeating: 0, count: num!+1)
for i in 2..<num!+1
{
if(i <= 3){list[i] = 1}
else
{
list[i] = list[i-1] + 1
if (i%3 == 0 && list[i]>list[i/3] + 1)
{
list[i] = list[i/3] + 1
}
if (i%2 == 0 && list[i]>list[i/2] + 1)
{
list[i] = list[i/2] + 1
}
}
}
print(list[num!])
점화식은 min(list(N/3) +1, dp(N/2)+1, dp(N-1)+1) 이다.
반응형
'알고리즘 문제 > Swift' 카테고리의 다른 글
[백준] 11047번 : 동전 0 - Swift (0) | 2021.08.06 |
---|---|
[백준] 6549번 : 히스토그램에서 가장 큰 직사각형 - Swift (0) | 2021.07.25 |
[백준] 2579번 : 계단 오르기 - Swift (0) | 2021.07.24 |
[백준] 9095번 : 1, 2, 3 더하기 - Swift (0) | 2021.07.21 |
[백준] 11729번 : 하노이 탑 이동 순서 - Swift (0) | 2021.07.14 |