9625번: BABBA
상근이는 길을 걷다가 신기한 기계를 발견했다. 기계는 매우 매우 큰 화면과 버튼 하나로 이루어져 있다. 기계를 발견했을 때, 화면에는 A만 표시되어져 있었다. 버튼을 누르니 글자가 B로 변했
www.acmicpc.net
아이디어
버튼 1번을 누르면 B가 되고 버튼을 또 한번 누르면 BA가 된다. 즉, k = 1이면 A = 0, B = 1이고 k = 2이면 A = 1, B = 1이 된다. 표로 나타내면 다음과 같다.
k | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
A | 0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 |
B | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 |
이 문제는 사실 피보나치 수열을 이용하는 문제라는 것을 알 수 있다. DP로 풀자.
전체 코드
import java.util.*;
import java.io.*;
public class BJ_9625 {
public static void main(String[] args) throws IOException {
// BABBA
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int k = Integer.parseInt(br.readLine());
int[][] dp = new int[2][46];
dp[0][2] = dp[1][1] = dp[1][2] = 1;
for (int i = 3; i <= k; i++) {
dp[0][i] = dp[0][i-2] + dp[0][i-1];
dp[1][i] = dp[1][i-2] + dp[1][i-1];
}
System.out.print(dp[0][k] + " " + dp[1][k]);
}
}
dp[0][i]는 i번째에 따른 A의 개수
dp[1][i]는 i번째에 따른 B의 개수를 의미한다.
코드에 대한 설명은 크게 어렵지 않으니 생략하도록 하겠다. 풀이 방식은 피보나치 수열에 대한 dp문제와 같았다.
'Algorithm > 백준' 카테고리의 다른 글
[Java][백준] 1932번 정수 삼각형 (0) | 2024.03.29 |
---|---|
[Java][백준] 10809번 알파벳 찾기 (0) | 2024.03.22 |
[Java][백준] 1931번 회의실 배정 (0) | 2024.03.22 |
[Java][백준] 12761번 돌다리 (0) | 2024.03.15 |
[Java][백준] 5014번 스타트링크 (0) | 2024.03.15 |