일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- til
- 자바스크립트 문제 풀이
- NPM
- lodash
- 자바스크립트 문제풀이
- HTML
- Baekjoon
- CSS
- 자바스크립트 문제
- 자바스크립트 알고리즘 문제
- 자바스크립트 연결리스트
- 알고리즘문제풀이
- next13
- leetcode
- 프론트엔드
- 리액트쿼리
- 제로베이스
- 타입스크립트
- Next
- react
- JS
- 자바스크립트
- 프로그래머스
- stack문제
- leetcode문제풀이
- 자바스크립트코딩테스트
- JavaScript
- 자바스크립트 알고리즘
- Next.js13
- 리액트
- Today
- Total
코드노트
자바스크립트 stack 괄호 짝 찾기 문제 풀이 본문
문제 설명
- 같은 짝의 괄호 위치를 찾아 출력
- 입력은 계산 수식으로 주어지며, 괄호의 짝 별 위치를 [시작, 끝] 으로 찾아 2차원 배열 형태로 반환
- 위치 시작 값은 0으로 시작, 하나라도 짝이 맞지 않을 경우 빈 배열을 반환한다.
입력 값
- "(a+b)"
- "(a*(b+c)+d)"
- "(a*(b+c)+d+(e)"
- "(a*(b+c)+d)+e)"
- "(a*(b+c)+d)+(e*(f+g))"
출력 값
#1 [ [ 0, 4 ] ]
#2 [ [ 3, 7 ], [ 0, 10 ] ]
#3 []
#4 []
#5 [ [ 3, 7 ], [ 0, 10 ], [ 15, 19 ], [ 12, 20 ] ]
- 2차원 배열에 넣어야하는게 처음에 문제가 어려웠다..
- 빈 배열을 넣고 따로 문제를 계산해서 인덱스를 넣을 생각을 했었다.
문제 풀이
if (!Array.prototype.isEmpty) {
Array.prototype.isEmpty = function () {
return this.length === 0;
};
}
function answer(str) {
let result = [];
let stack = [];
for (let i = 0; i < str.length; i++) {
if (str[i] == "(") {
stack.push(i);
} else if (str[i] == ")") {
if (stack.isEmpty()) {
return [];
}
result.push([stack.pop(), i]);
}
}
if (!stack.isEmpty()) return [];
return result;
}
- 빈배열을 가진 stack변수를 만들었다.
- 반복문을 통해서 str.length만큼 순회한다.
- 만약 str[i]가 "("와 같다면 stack에 index값을 넣어준다. // index값을 출력해야하기 때문에 바로 index를 넣으면 된다.
- 만약 str[i]가 ")"와 같다면 stack.length가 0이면 빈 괄호[]를 반환한다. // 처음 조건문에서 "("를 stack에 push를 했기 때문에 length가 0이라면 같은짝이 없다.
- stack.length가 0이상 이라면 result에 []안에다가 stack에 있는 index를 pop으로 빼고 현재 ")"인 index를 같이 []안에 넣어준다.
- 이렇게 모든 반복문을 실행하고도 stack 이 빈배열이 아니라면 []빈괄호를 반환한다.
for문과 if문으로 간단하게 풀 수 있는 문제였다. []안에서 stack.pop을 하는게 처음에는 생각을 못했었다ㅠㅠ
'Code note > 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
leetcode 3. Longest Substring Without Repeating Characters 문제 풀이 (0) | 2022.09.18 |
---|---|
LeetCode 26. Remove Duplicates from Sorted Array 배열 문제 풀이 (0) | 2022.09.18 |
자바스크립트 배열 stack 코드 문제 풀이 (0) | 2022.09.16 |
Leetcode Merge Two Sorted Lists 두 개의 정렬된 목록 병합 문제풀이, (0) | 2022.09.14 |
원형 연결리스트 알고리즘 문제 풀이 (0) | 2022.09.14 |