https://school.programmers.co.kr/learn/courses/30/lessons/12900
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
저는 DP를 이용하여 문제를 해결하였습니다.
1과 2는 미리 초기화 시켜주었습니다.
dp[depth] = (dfs(depth-1,dp) + dfs(depth-2,dp)) 이렇게 공식이 나온 이유는 세로로 하나 넣으면 한칸만 차지하고, 가로로 2개 넣으면 2칸 차지하기 때문입니다.
class Solution {
private static final int LIMIT = 1_000_000_007;
private static final int NOT_VALID = 0;
public int solution(int n) {
int answer = 0;
int[] dp = new int[n +1];
answer = dfs(n,dp);
return answer;
}
private int dfs(int depth, int[] dp){
if(dp[depth] != NOT_VALID){
return dp[depth];
}
if(depth == 1){
return 1;
}
if(depth == 2){
return 2;
}
return dp[depth] = (dfs(depth-1,dp) + dfs(depth-2,dp)) % LIMIT;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 단어 변환2(JAVA) (0) | 2023.07.23 |
---|---|
백준 27497번 알파벳 블록 (JAVA) (0) | 2023.07.22 |
프로그래머스 짝지어 제거하기 (JAVA) (0) | 2023.07.20 |
프로그래머스 두 큐 합 같게 만들기(JAVA) (0) | 2023.07.19 |
프로그래머스 연속된 부분 수열의 합 (JAVA) (0) | 2023.07.18 |