[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
💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!