-
[자료구조(스택/큐)] 괄호문자제거알고리즘 2022. 9. 25. 15:49
문제
입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는 프로그램을 작성하세요.
▣ 입력설명
첫 줄에 문자열이 주어진다. 문자열의 길이는 100을 넘지 않는다.▣ 출력설명
남은 문자만 출력한다.▣ 입력예제 1 (A(BC)D)EF(G(H)(IJ)K)LM(N)
▣ 출력예제 1 EFLM
결과
O
내가 푼 방식
function solution(s){ let stack = []; for(let x of s) { if(x === ')') { if(stack.indexOf('(') === -1) { stack = []; } else { stack.splice(stack.lastIndexOf('(')) } } else { stack.push(x) } } return stack.join(''); }
접근과정
1. stack이라는 빈배열을 설정하고 인자로 받는 string을반복문을 돌린다.
2. ')' 일때 앞에 제일 가까운 '('가 있다면 '(' 부터 ')'까지 날린다.
3. '('가 없다면 stack을 빈배열로 재할당한다.
4. 그 외의 경우에는 stack에 push한다
5. 마지막에 join시켜 배열을 string으로 만들고 리턴시킨다.
모범답안
function solution(s){ let answer; let stack=[]; for(let x of s){ if(x===')'){ while(stack.pop()!=='('); } else stack.push(x); } answer=stack.join(''); return answer; }
리뷰
1. 전반적인 플로우는 비슷하나 if문에서 나는 접근과정 2번 3번으로 두개의 분기처리를 했는데 생각해보니 '('가 있든 없든 어차피 날려야 되는 것이므로 모범답안과 같이 pop을써서 여는괄호를 나올 때까지 제거한다.
'알고리즘' 카테고리의 다른 글
[그리디] 결혼식 (0) 2023.01.28 [선택정렬] (0) 2022.10.09 [자료구조(스택/큐)] 올바른괄호 (0) 2022.09.18 [효율성/해쉬] 아나그램 (0) 2022.09.04 [효율성] 학급회장 해쉬 (0) 2022.08.07