안녕하세요
프로그래머스 JS [올바른 괄호] 스택/큐 본문
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예sanswer
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
제출한 답
function solution(s){
let count = 0;
for (let i=0; i<s.length; i++) {
// +++ 4. "((((((((..." 가 가득한 문자열일 경우 for문을 절반까지만 시행합니다.
if (count > s.length/2) return false
// 2. count가 -1이 되면 "("가 등장하지 않고, ")"가 나타난 것이므로 false를 반환합니다.
if (count === -1) return false
// 1. for문으로 문자열에서 "(" 를 발견하면 count를 +1 하고, ")"를 발견하면 count를 -1합니다.
s[i] === "(" ? count++ : count--;
}
// 3. 모든 시행이 끝난 뒤 count가 0이면 남은 짝이 없는 것이므로 true를 반환하고 그렇지 않으면 false를 반환합니다.
return count === 0 ? true : false
}
// 1. for문으로 문자열에서 "(" 를 발견하면 count를 +1 하고, ")"를 발견하면 count를 -1합니다.
// 2. count가 -1이 되면 "("가 등장하지 않고, ")"가 나타난 것이므로 false를 반환합니다.
// 3. 모든 시행이 끝난 뒤 count가 0이면 남은 짝이 없는 것이므로 true를 반환하고 그렇지 않으면 false를 반환합니다.
// +++ 4. "((((((((..." 가 가득한 문자열일 경우 for문을 절반까지만 시행합니다.
시간 초과가 자꾸 발생하다 말다 하여서 특별케이스가 존재하는 것 같아 4번은 특별 케이스로 조건을 추가했습니다.
'프로그래머스 > Lv.2' 카테고리의 다른 글
프로그래머스 JS [이진 변환 반복하기] (0) | 2022.11.03 |
---|---|
프로그래머스 JS [숫자의 표현] (0) | 2022.11.03 |
프로그래머스 JS [최솟값 만들기] ★비구조할당시 효율성 올라감 (0) | 2022.10.25 |
프로그래머스 JS [JadenCase 문자열 만들기] (0) | 2022.10.24 |
프로그래머스 JavaScript [최댓값과 최솟값] Math.min() (0) | 2022.09.26 |