CodingTest/LeetCode
[LeetCode] 1641. Count Sorted Vowel Strings
창브로
2025. 3. 26. 23:17
[문제 링크]
https://leetcode.com/problems/count-sorted-vowel-strings/description/
[문제]
- 문제 설명
주어진 숫자 n에 대해, 길이가 n인 정렬된 모음 문자열의 개수를 구하는 문제입니다. 모음은 a, e, i, o, u 5개가 있습니다. 문자열은 알파벳 순서대로 정렬되어야 하며, 예를 들어 a는 e, i, o, u 앞에 올 수 있지만 그 반대는 안 됩니다.
- 입력
정수 n이 주어집니다. (1 ≤ n ≤ 50)
- 출력
길이가 n인 정렬된 모음 문자열의 개수를 반환해야 합니다.
[풀이 과정]
코드 주석으로 설명하겠습니다.
[코드]
class Solution {
public int countVowelStrings(int n) {
// dp[i]는 길이가 i인 문자열에서 i번째 모음으로 끝나는 문자열의 개수
int[] dp = new int[5];
// 길이가 1일 때, 각 모음으로 끝나는 문자열의 개수는 1
Arrays.fill(dp, 1);
// 길이 2부터 n까지 계산
for (int i = 2; i <= n; i++) {
// 현재 길이에 대한 새로운 dp 배열
int[] newDp = new int[5];
// 각 모음의 끝에서 누적합을 계산
// 여기서 점화식인데 다음 배열의 첫번째 값은
// 전에 전체 값을 더한 값이고
// 그 이후 부턴 앞의 값을 하나씩 빼면 구해지는 문제
newDp[0] = dp[0] + dp[1] + dp[2] + dp[3] + dp[4];
newDp[1] = dp[1] + dp[2] + dp[3] + dp[4];
newDp[2] = dp[2] + dp[3] + dp[4];
newDp[3] = dp[3] + dp[4];
newDp[4] = dp[4];
dp = newDp;
}
// 최종 결과는 dp 배열에 저장된 값들의 합
return dp[0] + dp[1] + dp[2] + dp[3] + dp[4];
}
}
[회고]
항상 dp문제가 그렇지만 점화식을 찾기만하면 쉬운 것 같습니다.
질문과 피드백은 언제나 환영입니다.
감사합니다.