
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
올바른 괄호 문제이다! 스택을 활용해 풀 수 있다!
문자열에 reduce는 안됨. 그러나 for of 루프 돌며 원소 하나씩 탐색 가능함
문자열도 마찬가지로 Array.from()이나 [... string]으로 Array로 변환해야 Array.고차함수 쓸 수 있음
접근 방법
이 문제의 첫 접근은 아래와 같이 풀었습니다. ')' 가 보이면 스택에 넣고, 현재 탐색중인 원소가 ')' 면 top과 짝을 이루면 방출 아닐 경우 스택에 추가. 그렇게 한번 문자열을 탐색하면, 결과적으로 스택은 비어있어야 올바른 괄호가 됩니다.
풀이 1
function solution(s){
return Array.from(s).reduce(
(stack, value) => {
if (stack.length === 0) {
stack.push(value)
return stack
}
let last = stack.at(-1)
if (last == '(' && value == ')') {
stack.pop()
} else {
stack.push(value)
}
return stack
}, []).length == 0
}
풀이 2
'(' 와 ')' 단 두 가지 종류는 1, -1로 바꿀수도 있습니다.
그렇다면 문자열을 탐색하면서 '(' 일때는 +1을 , ')'일 때는 -1을 누적으로 더하면 그래도 올바른 괄호가 나옵니다.
그러나 ')'와 '(' 가 나와도 0이기 때문에 조건을 달아야 합니다. ')'가 먼저 나오는 순간 누적 값이 -1이 되고, -1이 된 경우는 무조건 올바른 괄호일 수 없습니다.
function solution(s){
return [...s].reduce(
(acc, value) => {
acc += value === '(' ? 1 : -1
if (acc === -1) return -100000
return acc
}, 0) === 0
}
728x90
'자바스크립트 입문하기' 카테고리의 다른 글
| [프로그래머스/JS] Level2 - 스킬트리 #Set #String (0) | 2025.10.19 |
|---|---|
| [프로그래머스/JS] Lv2 - 주식가격 # Array # Stack (0) | 2025.10.17 |
| [프로그래머스/JS] Level2 - 의상 #reduce() #Counter #Map (0) | 2025.10.17 |
| [프로그래머스/JS] 가장 큰 수 | PS일지 (0) | 2025.10.17 |