Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 js
- 프로그래머스 데브코스 프론트엔드 TIL
- 프로그래머스 데브코스 프론트엔드
- 인프런 자바스크립트 알고리즘 문제풀이
- react customHook 예시
- useEffect return
- 투포인터알고리즘 js
- 프로그래머스 K_Digital Training
- 모던 자바스크립트 Deep Dive
- frontend roadmap study
- KDT 프로그래머스 데브코스 프론트엔드
- 우테캠 회고록
- KDT 프로그래머스
- Vue3 Router
- Frontend Roadmap
- 프로그래머스 K_Digital Training 프론트엔드
- 개발자 특강
- 모던 자바스크립트 딥다이브
- TypeScript 문법 소개
- useRef 지역 변수
- 백준 node.js
- 프로그래머스 데브코스
- 머쓱이
- 모던 자바스크립트 TIL
- Vue3
- 리팩토링 회고
- 모던 javascript Deep Dive
- K_Digital Training
- react 프로젝트 리팩토링
- 모던 자바스크립트 Deep Dive TIL
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
괄호 문자 제거(스택) 본문
🚩 괄호 문자 제거 (스택)
📖 문제 설명 : 입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력하는
프로그램을 작성하세요.
💡Tip. 제목 그대로 스택 이용
function solution(s) {
let answer = ''
let stack = []
let str = []
for (let x of s) {
stack.push(x)
}
for (let i = 0; i < s.length; i++) {
let tmp = stack.pop()
// 여는 괄호 나올 시
if (tmp === '(') {
// 저장된 str 배열에서 닫는 괄호를 만날 때 까지 요소 제거
// 닫는 괄호 개수 만큼 반복문을 수행하기 때문에 시간 복잡도에 영향은 크게 미치지 않는다.
while (str.pop() !== ')') {}
} else {
str.push(tmp)
}
}
// 문제 풀이에서 끝에서 부터 반대로 제거 했기 때문에 문자열이 반대로 들어가 있다.
// 따라서 배열 reverse 후 문자열로 합치기
answer = str.reverse().join('')
return answer
}
let s = '(A(BC)D)EF(G(H)(IJ)K)LM(N)' // EFLM
console.log(solution(s))
👨💻 코드 설명
1. 스택을 이용해 문자열 s를 stack[] 배열에 넣어준다.
2. stack 배열에서 하나씩 pop 하면서 str 배열에 넣어준다.
2-1. 만약 여는 괄호 "("가 나왔다면 닫는 괄호까지 모두 삭제해야 하므로 str 배열에서 닫는 괄호를 만날 때까지 제거해 준다.
3. stack을 이용했기 때문에 반대로 들어가 있으므로 마지막에 배열의 요소를 뒤집어 준다.
잘못된 설명, 코드, 예외 케이스가 있다면 댓글 남겨주시면 수정하겠습니다.
728x90
'알고리즘_JS > 인프런 JS알고리즘' 카테고리의 다른 글
[투포인트] 결혼식 (0) | 2022.03.26 |
---|---|
Least Recently Used(카카오 캐시 문제 변형) (0) | 2022.03.25 |
모든 아나그램 찾기 (0) | 2022.03.25 |
연속 부분수열 2 (0) | 2022.03.16 |
연속 부분수열 1 (0) | 2022.03.15 |
Comments