[lv.2] 올바른 괄호 | 프로그래머스
[lv.2] 올바른 괄호 | 프로그래머스
📋 [ 프로그래머스 ] 시리즈 몰아보기 (17)
✏️ (lv.2) : 올바른 괄호
올바른 괄호란 '('
로 시작하면 반드시 짝지어서 ')'
로 끝나는(닫히는) 문자를 뜻한다. 예를 들어
- "()()" or "(())()" =
true
. - ")()(" or "(()(" =
false
. '(' 또는 ')' 로만 이루어진 문자열 s가 주어질 때, 문자열 s가 올바른 괄호인지 판별하는 solution을 작성하라.
s
<= 100,000s
는'('
혹은')'
로만 이루어져있다.
스택(stack)
자료형을 이용하여 문제를 해결할 수 있다.
프로그래머스에서 해당 문제를 스택을 이용해 풀이할 경우 시간초과
에 유의해야한다.
s.length
만큼for
문을 이용해 반복하며 로직을 수행한다.s[i]
=="("
인 경우 해당 원소를 스택에push
한다.위의 조건을 만족하지 않는 경우
스택.peek()
와s[i]
를 더하여 패턴이 일치하는지(temp == "()") 확인한다.일치할 경우
스택.pop()
, 그렇지 않을 경우스택.push(s[i])
를 진행한다.스택.length()
== 0일 경우true
, 그렇지 않을 경우false
를 return한다.
1 | function solution(s) { |
2 | let answer = false; |
3 | let temp = ""; |
4 | let stack = []; |
5 | for (let i = 0; i < s.length; i++) { |
6 | if (s[i] == "(") { |
7 | stack.push(s[i]); |
8 | } else { |
9 | temp = stack[stack.length - 1] + s[i]; |
10 | if (temp == "()") { |
11 | stack.pop(); |
12 | } else { |
13 | // s[i]를 push하는게 깔끔하지만 배열탐색에 시간이 할당되어 시간초과가 발생한다. |
14 | stack.push(s); |
15 | } |
16 | } |
17 | } |
18 | // 0은 false로도 간주되기에 해당 코드는 유효하다. |
19 | // stack.length == 0 를 조건으로 사용할 경우 시간초과가 발생한다. |
20 | if (!stack.length) { |
21 | answer = true; |
22 | } |
23 | return answer; |
24 | } |
25 |
👨💻 관련 포스트
[lv.1] 개인정보 수집 유효기간
[lv.1] 개인정보 수집 유효기간
프로그래머스 lv.1 개인정보 수집 유효기간 풀이 with javascript. 해당 문제에서 한달은 28일로 고정이다. 따라서 today와 privacies 각 원소(개인정보)의 날짜를 년, 월, 일에 각 단위에 해당하는 수 * 28을 수행하여 일 단위로 변환한 후 terms에 해당하는 수를 더해 문제를 해결한다.
2023-05-30
[lv.1] 성격 유형 검사하기 | 프로그래머스
[lv.1] 성격 유형 검사하기 | 프로그래머스
프로그래머스 lv.1 성격 유형 검사하기 풀이 with javascript. javascript의 객체를 이용해 성격 유형(이하 MBTI)별 획득 점수를 기록하고 MBTI의 value를 비교해 문제를 해결한다.
2023-06-01
[lv.2] 주차 요금 계산 | 프로그래머스
[lv.2] 주차 요금 계산 | 프로그래머스
프로그래머스 lv.2 주차 요금 계산 풀이 with javascript. javascript의 객체를 이용해 차량의 입/출차 시간을 기록, 해당 객체를 순회하며 주차시간을 주어진 요금표에 맞게 정산하는 것으로 문제를 해결한다.
2023-06-04
💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!