요구능력 : DP문제풀이
코드설명 :
왼쪽끝을 1로두고 푸는사람들이 있는데 나는 왼쪽끝에서 시작이라서 안움직인게 맞다고보고 0으로 두고 풀었다.
문제를 잘보면 현재칸 + (1~점프숫자)까지 점프가 가능한것이다.
현재칸은 i로 잡아주고 1~점프숫자는 j로 for문을 생성했다.
가장중요한건 초기 dp숫자를 1001로 설정하는것이다.(Int.max도 가능)
문제에서 미로의 줄은 1~1000까지 주어진다고 했으니까
줄이 1000이 주어졌을때 한번씩 점프해도 1000까지 간다.
그러니까 최대 점프횟수는 1000인것이다.
초기 dp숫자를 1001로 설정해놓아야 n이 1000이 나와도 최소값으로 비교가 가능하고 dp[n]에 들어갈 수 있는 가장 큰 수는 1000인데 1001이라는 숫자가 그대로 들어가있다면 갈 수없는 경우이다.
나는 한번 dp[i] = i로 했다가 틀렸다.
i + j는 현재칸 + (1~점프숫자)를 구현한것이다.
후기 : 어찌저찌 거의다 풀었는데 조건이 안맞아서 헤맸다..
let n = Int(String(readLine()!))!
let arr = readLine()!.split(separator: " ").map{Int(String($0))!}
var dp = Array(repeating: 1001, count: 1001)
dp[1] = 0
for i in 1...n{
for j in stride(from: 1, through: arr[i - 1], by: 1){
if i + j <= n {
dp[i + j] = min(dp[i] + 1, dp[i + j])
}
}
}
if dp[n] == 1001 {
print(-1)
}else{
print(dp[n])
}
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][Math] 백준 1339번 (단어 수학) (0) | 2021.12.17 |
---|---|
[Swift][BFS][DFS] 백준 14502번 (연구소) (0) | 2021.12.16 |
[Swift][DP] 백준 11048번 (이동하기) (0) | 2021.12.15 |
[Swift][BFS] 백준 16948번 (데스 나이트) (0) | 2021.12.14 |
[Swift][BFS] 백준 16928번 (뱀과 사다리 게임) (0) | 2021.12.14 |
댓글