Leetcode Java Number of Ways to Form a Target String Given a Dictionary
업데이트:
문제
코드
class Solution {
private static final int MOD = 1000000007;
public int numWays(String[] words, String target) {
int length = target.length();
long[] dp = new long[length + 1];
dp[0] = 1;
for (int i = 0; i < words[0].length(); i++) {
int[] count = new int[26];
for (String word : words) {
count[word.charAt(i) - 'a']++;
}
for (int j = length - 1; j >= 0; j--) {
dp[j + 1] += (dp[j] * count[target.charAt(j) - 'a']) % MOD;
}
}
return (int) (dp[length] % MOD);
}
}
결과
설명
- words를 이용하여 target 문자열을 구성할 수 있는 방법의 수를 계산하는 문제이다.
- 단, 방법의 수가 매우 클 수 있으므로, 모듈러 $10^9 + 7$을 적용한다.
- 문제 풀이에 필요한 변수를 정의한다.
- length는 target 문자열의 길이를 저장한 변수이다.
- dp는 방법의 수를 계산하기 위한 변수로, $length + 1$ 크기의 long 배열로 초기화하여 첫 값에 1을 넣어준다.
- 0부터 words[0]의 길이 미만까지 i를 증가시키며 아래를 반복한다.
- count는 각 문자 갯수를 계산할 변수로, words 내 문자열들의 문자 갯수를 계산하여 넣어준다.
- $length - 1$부터 0 이상까지 j를 감소시키며, dp[$j + 1$]에 아래 두 값을 곱한 값을 MOD로 나눈 나머지 값을 더해준다.
- dp[j]인 이전 위치까지 구성하기위한 방법의 수.
- target의 j번째 문자에 해당하는 count 값인 현재 문자를 넣을 방법의 수.
- 반복이 완료되어 계산된 방법을 다시 MOD로 나눈 나머지 값을 int형으로 변환하여 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기