-
Notifications
You must be signed in to change notification settings - Fork 101
/
괄호-회전하기&76502&.js
38 lines (37 loc) · 1.57 KB
/
괄호-회전하기&76502&.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//https://github.com/codeisneverodd/programmers-coding-test
//완벽한 정답이 아닙니다.
//정답 1 - codeisneverodd
function solution(s) {
let answer = 0;
let sArr = s.split('')
if (isRight(sArr.join(''))) answer += 1
for (let i = 0; i < sArr.length - 1; i++) {
sArr.push(sArr.shift())
if (isRight(sArr.join(''))) answer += 1
}
return answer;
}
function isRight(str) {
const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')']
let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}]
for (let sIndex = 0; sIndex < str.length; sIndex++) {
for (let bIndex = 0; bIndex < 3; bIndex++) {
if (str[sIndex] === bracketOpen[bIndex]) {
status[bIndex].open = true
status[bIndex].openOrder.push(sIndex)
}
if (str[sIndex] === bracketClose[bIndex]) {
if (status[bIndex].openOrder.length > 0) {
if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0)
return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘
status[bIndex].openOrder.pop()
status[bIndex].open = false
} else {
return false //열리기 전에 닫힘
}
}
}
}
for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음
return true
}