
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12914
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
dp로 풀이했다.
1칸 또는 2칸만 움직일 수 있다는걸 반대로 생각하면 -> 내가 있는 현재 위치 - 1 에서 오는 방법, 내가 있는 현재 위치 -2 에서 오는 방법 두가지가 있다.
따라서 점화식은 d[i] = d[i-1] + d[i-2] 로 정의할 수 있다.
그리고 값 오버 플로우를 대비해서 dp 배열에 저장할때부터 % 연산하는걸 주의해야 한다. 마지막에 return할때 처리할려면 이미 배열안은 오버 플로우가 나있는 상황이니 말이다.
코드
import java.util.*;
class Solution {
public long solution(int n) {
long d[] = new long[2001]; // n번째 칸에 도달하는 방법의 개수
d[1] = 1;
d[2] = 2;
for(int i=3; i<2001; i++){
d[i] = (d[i-1] + d[i-2])%1234567;
}
return d[n];
}
}
후기
백준에 계단 문제가 생각난다. 이런 dp만 있다면..
'프로그래머스' 카테고리의 다른 글
LV2 할인 행사 (Java) (1) | 2023.11.12 |
---|---|
LV2 연속 부분 수열 합의 개수 (Java) (0) | 2023.11.12 |
LV2 N개의 최소공배수 (Java) (0) | 2023.11.10 |
LV2 예상 대진표 (Java) (0) | 2023.11.10 |
LV2 구명보트 (Python) (0) | 2023.11.08 |