[JS] 올바른 괄호
문제 설명
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
입력설명
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
출력설명
첫 번째 줄에 YES, NO를 출력한다.
입력예제
(()(()))(()
출력예제
NO
문제 풀이
입구와 출구가 동일한 stack
사용 해야 함.
LIFO(Last In First Out) : 나중에 들어간 것이 먼저 나옴.
- push() : 객체를 집어넣음
- pop() : 나중에 들어간 객체가 먼저 나옴
stack
에 '(' 괄호를 입력하다가 ')' 닫는 괄호를 만나면 pop하기.
- for..of 문을 사용하여 문자열 개수만큼 반복한다.
- if : '(' 를 넣으면 stack 배열에 넣는다. => push
- else : ')'를 넣었는데
- if : stack이 비어있으면 'NO'return
- stack 배열에서 나중에 들어간 객체 '('를 꺼내준다. => pop
- for문이 끝나고 if : stack 배열이 비어있지 않으면 'NO' return
- else : 'YES' return
<!-- [210908] 올바른 괄호 -->
<!-- 스택에 괄호를 push 하다가 ')' 닫는 괄호를 만나면 pop하기 -->
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(s) {
let answer = 'YES';
let stack = [];
for (let x of s) {
// '('(여는 괄호)를 넣으면 push
if (x === '(') stack.push(x);
else {
// ')'(닫는 괄호)를 넣었는데 짝이 없으면
if (stack.length === 0) return 'NO';
stack.pop();
}
}
// stack이 비어있지 않으면 올바른 괄호가 아님
if (stack.length > 0) {
answer = 'NO';
}
return answer;
}
let a = '(()(())))';
console.log(solution(a));
</script>
</body>
</html>
Author And Source
이 문제에 관하여([JS] 올바른 괄호), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@97godo/올바른-괄호저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)