카테고리 없음
[스택] 프로그래머스 Lv2. 올바른괄호 풀이
oilater
2023. 5. 14. 19:55
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘 강의 중 '스택' 부분을 듣고 실습 예제로 풀어본 문제인데 알고보니 2단계!
1단계 연습문제들을 다 풀고, 강의를 듣고 있는데 2단계도 해볼만 하겠다는 생각이 드네요! (착각일수도...ㅋㅅㅋ)
얼른 자료구조 / 알고리즘 배우고 2단계로 넘어가보려구요.
나의 풀이
function solution(s) {
let answer = [s[0]];
for (let i = 1; i < s.length; i++) {
if (s[i] === ")") {
answer.pop();
} else {
answer.push(s[i]);
}
}
return answer.length === 0 ? true : false;
}
그동안 pop, push 함수를 쓰긴 했지만 오늘 배운 스택을 이용해 문제를 풀고자 했다.
먼저 answer 에 문자열 s의 첫번째 인덱스 값을 담아준다.
그리고 for 문을 돌려 s[i] 값이 ")"가 되면 answer에 담긴 "(" 를 제거해준다.
s[i]의 값이 ")"가 아니라면 answer에 push 해준다.
최종적으로 answer의 길이가 0이면 true를, 0이 아니면 false를 return 해준다.
다른 사람의 풀이
function solution(s){
let cum = 0
for (let paren of s) {
cum += paren === '('? 1: -1
if(cum < 0) {
return false
}
}
return cum === 0? true: false;
}
코드를 보자마자 우와 소리가 나왔다.
비슷한 코드지만 더 간결하고 cum 을 0으로 두고
"(" 또는 ")"인지에 따라 +1, -1 을 해준 생각이 기발했다.
728x90
반응형
LIST