알고리즘
[Java] 백준 24956번 나는 정말 휘파람을 못 불어
J3SUNG
2023. 7. 18. 20:15
728x90
다이나믹 프로그래밍 문제입니다.
WHEE가 나올 수 있는 경우의 수를 모두 찾고 1000000007로 나눈 나머지를 출력해야 합니다.
크기가 3인 배열을 선언합니다.
=> long[] arr = new long[3];
1. W일 경우 0번 인덱스에 +1
2. H일 경우 1번 인덱스에 0번 인덱스에 있는 값만큼 추가해줍니다.
3. E일 경우
- 2번 인덱스에 있는 값만큼 결과값에 더해줍니다.
- 2번 인덱스에 있는 값만큼 2번인덱스에 더해줍니다.
- 2번 인덱스에 1번 인덱스에 있는 값만큼 추가해줍니다.
위를 반복하여 최종적으로 WHEE가 가능한 경우를 찾을 수 있습니다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int MOD = 1_000_000_007;
long result = 0;
long[] arr = new long[3];
String s = br.readLine();
for (int i = 0; i < n; ++i) {
if (s.charAt(i) == 'W') {
++arr[0];
arr[0] %= MOD;
} else if (s.charAt(i) == 'H') {
arr[1] += arr[0];
arr[1] %= MOD;
} else if (s.charAt(i) == 'E') {
result += arr[2];
arr[2] *= 2;
arr[2] += arr[1];
arr[2] %= MOD;
}
result %= MOD;
}
bw.write(result + "\n");
bw.close();
}
}