
[lv.2] 올바른 괄호 | 프로그래머스
[lv.2] 올바른 괄호 | 프로그래머스
📋 [ 프로그래머스 ] 시리즈 몰아보기 (17)
✏️ (lv.2) : 올바른 괄호
올바른 괄호란 '(' 로 시작하면 반드시 짝지어서 ')' 로 끝나는(닫히는) 문자를 뜻한다. 예를 들어
- "()()" or "(())()" = true.
- ")()(" or "(()(" = false. '(' 또는 ')' 로만 이루어진 문자열 s가 주어질 때, 문자열 s가 올바른 괄호인지 판별하는 solution을 작성하라.
- s<= 100,000
- s는- '('혹은- ')'로만 이루어져있다.
스택(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
💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!