File tree Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * 문자열 s가 주어진 단어 사전 wordDict의 단어들로 분리될 수 있는지 확인하는 문제
3+ * 다이나믹 프로그래밍(DP)
4+ * 시간 복잡도: O(n * k) (k: 최대 단어 길이)
5+ * 공간 복잡도: O(n) (DP 배열 + 단어 집합)
6+ */
7+
8+ /**
9+ * @param {string } s
10+ * @param {string[] } wordDict
11+ * @return {boolean }
12+ */
13+ var wordBreak = function ( s , wordDict ) {
14+ const n = s . length ;
15+ const dp = new Array ( n + 1 ) . fill ( false ) ; // DP 배열 초기화
16+ dp [ 0 ] = true ; // 빈 문자열은 항상 분리 가능
17+
18+ const wordSet = new Set ( wordDict ) ; // 단어 사전을 Set으로 변환: 검색시간 O(1)
19+
20+ const maxWordLength = Math . max ( ...wordDict . map ( ( word ) => word . length ) ) ; // 단어의 최대 길이 찾기
21+
22+ for ( let i = 0 ; i <= n ; i ++ ) {
23+ // 가능한 단어 길이만 검사
24+ for ( let j = Math . max ( 0 , i - maxWordLength ) ; j < i ; j ++ ) {
25+ if ( dp [ j ] && wordSet . has ( s . substring ( j , i ) ) ) {
26+ // dp[j]가 true이고, j부터 i까지의 부분 문자열이 단어 사전에 존재하는 경우
27+ dp [ i ] = true ;
28+ break ;
29+ }
30+ }
31+ }
32+
33+ return dp [ n ] ;
34+ } ;
You can’t perform that action at this time.
0 commit comments