1
+ //https://github.com/codeisneverodd/programmers-coding-test
2
+ //완벽한 정답이 아닙니다.
3
+ //정답 1
4
+ function solution ( p ) {
5
+ if ( p . length === 0 ) return p
6
+ let bracketCount = 0
7
+ let isURight = true
8
+ for ( let i = 0 ; i < p . length ; i ++ ) {
9
+ bracketCount = p [ i ] === '(' ? bracketCount + 1 : bracketCount - 1
10
+ if ( bracketCount < 0 ) isURight = false
11
+ if ( bracketCount === 0 ) {
12
+ const [ u , v ] = [ p . slice ( 0 , i + 1 ) , p . slice ( i + 1 ) ]
13
+ if ( isURight ) {
14
+ return u + solution ( v )
15
+ } else {
16
+ let emptyString = '(' + solution ( v ) + ')'
17
+ const slicedReversedString = u
18
+ . slice ( 1 , u . length - 1 )
19
+ . split ( '' )
20
+ . map ( bracket => bracket === '(' ? ')' : '(' )
21
+ . join ( '' )
22
+ return emptyString + slicedReversedString
23
+ }
24
+ }
25
+ }
26
+ }
27
+
28
+ //정답 2
29
+ function solution ( p ) {
30
+ if ( p . length === 0 ) {
31
+ return p
32
+ } else {
33
+ const sliceIndex = balancedIndex ( p )
34
+ const [ u , v ] = [ p . slice ( 0 , sliceIndex + 1 ) , p . slice ( sliceIndex + 1 ) ]
35
+ if ( isRight ( u ) ) {
36
+ return u + solution ( v )
37
+ } else {
38
+ let emptyString = '(' + solution ( v ) + ')'
39
+ const slicedReversedString = u
40
+ . slice ( 1 , u . length - 1 )
41
+ . split ( '' )
42
+ . map ( bracket => bracket === '(' ? ')' : '(' )
43
+ . join ( '' )
44
+ return emptyString + slicedReversedString
45
+ }
46
+ }
47
+ }
48
+ const isRight = ( str ) => {
49
+ if ( str [ 0 ] === ')' ) return false
50
+ let stack = 0
51
+ for ( let i = 0 ; i < str . length ; i ++ ) {
52
+ stack = str [ i ] === '(' ? stack + 1 : stack - 1
53
+ if ( stack < 0 ) return false
54
+ }
55
+ return stack === 0
56
+ }
57
+ const balancedIndex = ( str ) => {
58
+ let count = 0
59
+ for ( let i = 0 ; i < str . length ; i ++ ) {
60
+ count = str [ i ] === '(' ? count + 1 : count - 1
61
+ if ( count === 0 ) return i
62
+ }
63
+ }
0 commit comments