-
[자료구조(스택/큐)] 올바른괄호알고리즘 2022. 9. 18. 16:08
문제
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
▣ 입력설명
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.▣ 출력설명
첫 번째 줄에 YES, NO를 출력한다.▣ 입력예제 1 (()(()))(()
▣ 출력예제 1 NO
결과
세모(힌트참고)
내가 푼 방식
const solution = (arg) => { let stack = []; let answer = 'NO'; for(const x of arg) { if(x === '(') { stack.push(x); } else { stack.pop() } } if(!stack.length) { answer = 'YES' } return answer; } solution('(()(()))(())')
접근과정
1. 처음에 어떻게 접근해야 할지 몰라, 답안의 윗부분의 stack 배열을 두고 '('의 조건문을 두는 것까지 참고함.
2. '(' 이라면 stack 배열에 push, 아니라면 pop을 써서 소거하는 방법을 썼고
3. 마지막에 stack의 length 체크를 통해 있다면 NO 없다면 YES를 반환했다.
모범답안
function solution(s){ let answer="YES"; stack=[]; for(let x of s){ if(x==='(') stack.push(x); else{ if(stack.length===0) return "NO"; stack.pop(); } } if(stack.length>0) return "NO"; return answer; }
리뷰
1. 중요한 부분을 놓쳤다. ')'의 경우 pop만 할 것이 아니라 stack의 length 체크를 통해 length가 없다면 ')'이 친구만 들어가서 절대로 대칭이 될수 없기에 'NO'를 리턴시켜야 한다.
'알고리즘' 카테고리의 다른 글
[선택정렬] (0) 2022.10.09 [자료구조(스택/큐)] 괄호문자제거 (0) 2022.09.25 [효율성/해쉬] 아나그램 (0) 2022.09.04 [효율성] 학급회장 해쉬 (0) 2022.08.07 [효율성] 최대 매출 (0) 2022.07.31