알고리즘 문제풀이
[프로그래머스] 멀리 뛰기 (Swift)
SiO2whocode
2025. 6. 2. 22:01
https://school.programmers.co.kr/learn/courses/30/lessons/12914
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
한 친구가 일직선 상의 선에서 한 칸씩 혹은 두 칸씩 나아갈 수 있는데, 마지막 칸에 도달할 수 있는 경우의 수를 구하는 문제였다.
단, 1234567로 나눈 나머지 값을 구하는 문제
(이렇게 나눈 나머지 값을 구하는 문제의 경우, 마지막 결과 뿐만 아니라 그 전에 결과를 더할때 부터 1234567으로 나눈 값을 적용해주어야 한다. 중간에 Int 범위를 넘어갈 수 있기 때문)
접근 방법
0칸부터 시작해서 n칸까지 가는데,
i칸에서 i+1칸에 갈 수 있는 경로는 이미 현재 i+1칸에 갈 수 있는 경로 수 + i칸 까지 올 수 있는 경로 수이다.
i칸 까지 올 수 있는 경로를 저장하고 있는 배열을 dp[]라고 하면,
dp[i+1] = dp[i+1] + dp[i] 이다.
이건 한칸씩 이동했을 때이고,
두칸씩 이동할 때는 dp[i+2] = dp[i+2] + dp[i] 가 된다.
따라서 범위 내에서 n칸까지 이 경우를 모두 dp 배열에 반영해주면 된다.
그리고 dp[i]를 더할 때, dp[i] % 1234567 을 더해주는 것
소스코드
func solution(_ n:Int) -> Int {
var dp:[Int] = [Int](repeating: 0, count: n+1)
dp[0] = 1
for i in 0...n-1 {
dp[i+1] += dp[i] % 1234567
if i+2 <= n {
dp[i+2] += dp[i] % 1234567
}
}
return dp[n] % 1234567
}
728x90