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는 여기에서 확인 가능합니다.
 
  
  
댓글남기기