문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()"는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
코드
function solution(s){
let stack = [], cnt = 0;
for(let i=0; i<s.length; i++){
if(s[i] === '(') {
stack.push('(');
cnt++;
}
else {
stack.pop();
cnt--;
}
}
if(stack.length > 0 || cnt !== 0) return false;
return true;
}
지난번 괄호 검사와 되게 유사하다.
2021.05.11 - [알고리즘] - [자바스크립트/알고리즘] 스택 - 괄호 검사
주어진 s를 돌다가 (를 만나면 스택에 push 하고 cnt를 증가시킨다.
)의 경우에는 스택을 pop하고 cnt를 감소시킨다.
stack에 아직 괄호가 남았거나, cnt가 0이 아니라면 답은 false이다.
처음에 알고리즘을 짤때 for of를 사용하였다.
답은 다 맞췄지만 효율성에서 떨어져서..!! 무엇 때문인지 고민했다...
그러다 for문을 사용해봤는데 바로 6점을 획득했다.
for문, for or, for in, forEach ...와 같은 반복문의 효율성 차이를 살펴보아야 할 것 같다.
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[자바스크립트, 파이썬/알고리즘] 프로그래머스 - 크레인 인형뽑기 게임 (카카오 인턴십 문제) (0) | 2021.05.28 |
---|---|
[자바스크립트/알고리즘] 프로그래머스 - JadenCase 문자열 만들기 (정규식) (0) | 2021.05.18 |
[자바스크립트/알고리즘] 프로그래머스 - 최댓값과 최솟값 (0) | 2021.05.15 |
[자바스크립트/알고리즘] 프로그래머스-위장 (0) | 2021.05.11 |
[자바스크립트/알고리즘] 프로그래머스-직사각형 별찍기 (0) | 2021.01.28 |