티스토리 뷰
728x90
반응형
문제 링크
https://www.acmicpc.net/problem/1904
문제 풀이
점화식 문제이고, 동적 프로그래밍 방법을 알면 쉽게 풀 수 있는 문제입니다.
차근차근 a1부터 써보면 값을 예측할 수 있습니다.
a1 = 1;
a2 = 2;
a3 = a1 + a2 = 3;
a4 = a2 + a3 = 5;
...
어떻게 이렇게 나오게 되는지 알아보겠습니다.
예를들어 a5의 경우를 보겠습니다.
1. a5는 맨 앞에 00이 오거나 1이 오게 됩니다.
2-1. 00이 오게되면 나머지 3자리는 a3와 같은 수열로 채워집니다.
2-2. 1이 오게되면 나머지 4자리는 a4와 같은 수열로 채워집니다.
3. a3+a4를 하게되면 a5의 값을 구할 수 있습니다.
이문제는 단순 재귀로 풀게되면 시간이 너무 오래 걸리기 때문에 동적 프로그래밍을 사용해야 합니다.
그리고, 탑다운 방식(재귀)으로 풀게 되면 스택오버플로우가 나기 때문에 바텀업 방식(반복문)을 이용하여 푸는 것이 쉽습니다.
소스 코드
import java.util.*;
public class Main {
static long [] memo;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
memo = new long[n+1];
for (int i = 0; i <= n; i++) {
if( i ==0 || i ==1 || i==2) memo[i] = i;
else memo[i] = (memo[i-1] + memo[i-2])%15746;
}
System.out.println(memo[n]);
}
}
728x90
반응형
'Problem Solving' 카테고리의 다른 글
[ 백준 1629 ] 곱셈 - Java (0) | 2020.12.18 |
---|---|
[ 백준 1149 ] RGB 거리 - Java (1) | 2020.12.16 |
[프로그래머스/Java] 문자열 압축 (1) | 2020.12.14 |
[프로그래머스/Java] 괄호 변환 (0) | 2020.12.11 |
[프로그래머스 / Java] 숫자의 표현 (0) | 2020.12.10 |
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- javascript
- 삼성 코테
- 카카오 코딩 테스트
- 삼각달팽이
- DP
- java
- 키패드 누르기
- vaild
- 39회차
- 백준
- 문자열 압축
- 01타일
- 오버로딩
- 제네릭(Generic)
- yyyy-MM-dd
- 제네릭 타입
- 삼성기출
- 가장 큰 수
- 반례
- 커링
- 날짜 유효성
- for of
- 청소년상어
- spring cache
- RGB거리
- 카카오 인턴십
- local cache
- 19236
- 1629
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함