문제
https://school.programmers.co.kr/learn/courses/30/lessons/12909
풀이
스택을 구현하는 문제이다. 자바에서는 스택 라이브러리를 불러오면 끝인데, 자바스크립트는 직접 구현해야만 한다.
스택은 아래처럼 구현할 수 있다.
class Stack{
constructor(){
this.arr = [];
}
push(item){
this.arr.push(item);
}
pop(){
return this.arr.pop();
}
peek(){
return this.arr[this.arr.length-1];
}
isEmpty(){
return this.arr.length===0;
}
}
이렇게 배열을 이용해서 배열메서드인 pop과 push를 이용해 쉽게 구현할 수 있다.
추가로, 자바에서도 Stack을 ArrayDeque를 통해 구현할 수 있는데, 그 때의 방식을 보면 index를 사용한다. 물론 head와 tail이라는 두 개의 인덱스를 사용하지만, 그것은 추후에 다룰, 큐에서 다루어보겠다.
아래는 배열 메서드가 아닌, 인덱스를 통한 Stack 구현이다.
class Stack{
constructor(){
this.arr = [];
this.index = 0;
}
push(item){
this.arr[this.index++] = item;
}
pop(){
if(this.index<=0) return null;
return this.arr[--this.index];
}
peek(){
return this.arr[this.index-1];
}
isEmpty(){
return this.index===0;
}
}
이전에 자바로 풀어본 문제였던터라, 스택 구현체를 구현해보는 것에 중점을 두었다.
풀이를 설명하자면, "(" 가 오면 stack에 push한다. 그리고 ")"라면, peek()이 "("인지 확인하고, 맞다면 pop을 통해 스택의 "("를 빼낸다.
동작이 완료되고 stack이 비어있지않다면 올바르지 않은 괄호 형식이다.
아래는 전체 소스 코드이다.
function solution(s){
var answer = true;
let stack = new Stack();
for(let i = 0; i<s.length;i++){
let str = s.charAt(i)
if(str==='('){
stack.push(str);
}
else{
if(stack.peek()=='(') stack.pop();
else stack.push(str);
}
}
if(stack.isEmpty()) answer = true;
else answer = false;
return answer;
}
class Stack{
constructor(){
this.arr = [];
this.index = 0;
}
push(item){
this.arr[this.index++] = item;
}
pop(){
if(this.index<=0) return null;
return this.arr[--this.index];
}
peek(){
return this.arr[this.index-1];
}
isEmpty(){
return this.index===0;
}
}
'JavaScript > 프로그래머스' 카테고리의 다른 글
[프로그래머스/JS] Lv2. 게임 맵 최단거리 (큐 구현 방식) (0) | 2024.07.02 |
---|---|
[프로그래머스/JS] Lv2. 더 맵게 (힙 자료구조, 우선순위 큐 구현) (0) | 2024.06.27 |
[프로그래머스/JS] Lv1. 같은 숫자는 싫어 (1) | 2024.06.26 |
[프로그래머스/JS] Lv0. 문자열 반복해서 출력하기 (반복 출력) (0) | 2024.06.21 |
[프로그래머스/JS] Lv0. a와 b 출력하기 (구조 분해 할당) (0) | 2024.06.21 |