-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbracket.js
More file actions
65 lines (53 loc) · 1.97 KB
/
bracket.js
File metadata and controls
65 lines (53 loc) · 1.97 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
올바른 괄호
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고,
올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
문자열 s의 길이 : 100,000 이하의 자연수
문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
-----------------------
이 문제의 효율성 테스트 요점
-> 빠른 탈출구 2가지 체크
*빠른 탈출구: s의 첫 번째 값이 ")"일 경우, s의 마지막 값이 "("일 경우
위의 경우 검사하지 말고 바로 false 리턴
+ if문과 switch의 속도는 비슷한 듯, 두 가지의 경우 모두 효율성 테스트 통과
*/
// 정확성 테스트 통과, 효율성 테스트 실패
function solution(s){
return s[0] === ')' ? false : check(s);
// 효율성 실패 이유 => 마지막 괄호가 열린 괄호일 경우를 제외해서
}
const check = (s) => {
let ck = [];
for(let i=0; i<s.length; i++) {
switch(s[i]) {
case '(':
ck.push('(');
break;
case ')':
ck.pop();
break;
default:
break;
}
}
return ck.length === 0 ? true : false;
}
// 정확성 테스트 통과, 효율성 테스트 통과
function solution(s){
return s[0] === ')' || s[-1] === '(' ? false : check(s);
}
const check = (s) => {
let ck = [];
for(let i=0; i<s.length; i++) {
if (s[i] === '(') { // switch문과 if문 둘 다 효율성 통과
ck.push('(');
} else if (s[i] === ')') {
ck.pop();
}
}
return ck.length === 0 ? true : false;
}