Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- vm인스턴스생성
- Array.asList
- 재귀함수
- 스택
- Spring Web MVC
- MySQL
- 자바
- 백준
- 투포인터알고리즘
- 성능테스트툴
- 코딩테스트
- 클라우드에서 도커 실행하기
- GCP
- java
- 코드스테이츠
- 백준 11659
- 알고리즘
- 재귀와반복문
- 인텔리제이
- Spring MVC 동작원리
- 코드스테이츠 백엔드
- 버블정렬
- 프로그래머스
- 구간합구하기
- OOP
- List.of
- 싱글톤패턴
- String.valueOf()
- Spring MVC 구성요소
- 11659
Archives
- Today
- Total
순간을 기록으로
[Java] 돌다리건너기 본문
문제
풀이
철수가 다리를 건너는 모든 경우의 수를 구해야한다. 복잡한 문제다. 큰 문제는 작은 문제로 만들고, 점점 크게 문제를 풀면 된다. 여기서는 동적 계획법을 사용한다.
먼저 첫 번째 돌다리에 오는 경우의 수는 1이다.
두 번째 돌다리에 오는 경우의 수는 2이다.
조심해야되는 것은 n을 입력받았을 때 n번째 돌다리에 오는 경우의 수를 구하는게 아니다. 개울을 '건너야' 한다. 그러므로 만약 7을 입력받았다면 그 다음 번째를 구해야 답이 나온다.
코드
package 인프런.동적계획법.돌다리건너기;
import java.util.Scanner;
public class Main {
static int[] dp;
public int solution(int N) {
dp[1] = 1; // 첫 번째 돌다리에 도착하는 경우의 수
dp[2] = 2; // 두 번째 돌다리에 도착하는 경우의 수
for (int i=3; i<=N+1; i++) { // n번째가 아닌 n+1까지 경우의 수를 구하고 dp[n+1]의 값이 돌다리는 건너는 모든 경우의 수이다.
dp[i] = dp[i-2] + dp[i-1];
}
return dp[N+1];
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int N = in.nextInt();
dp = new int[N+2]; // 1은 인덱스이므로 증가시키고 나머지 1은 돌다리를 지난다는 조건이니깐 +1만큼 더 길이를 늘려야한다.
System.out.println(T.solution(N));
}
}
'Problem Solving' 카테고리의 다른 글
[프로그래머스] 피보나치 수/ Java (0) | 2022.02.13 |
---|---|
[프로그래머스] 멀쩡한 사각형/ Java (0) | 2022.02.13 |
[Java] 계단오르기 (0) | 2022.01.25 |
[Java] 송아지 찾기 (0) | 2022.01.19 |
[Java] 좌표 정렬 (0) | 2022.01.19 |
Comments