🗃️javascript/프로그래머스

올바른 괄호(Lv.2)[== 와 === 차이. ===는 값 비교 + 데이터 유형도 비교]

하얀성 2023. 3. 25. 10:19

 

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항
  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예sanswer
"()()" true
"(())()" true
")()(" false
"(()(" false
입출력 예 설명

입출력 예 #1,2,3,4
문제의 예시와 같습니다.


<제출답안>

처음에 push로 배열 길이를 비교해줌으로써 구현했지만 시간이 초과되었다.

function solution(s){
    let arr1 = 0;
    let s2 = [...s]

    for(let i =0; i<s2.length; i++) {
        if(s2[i] =='(') {
            arr1 += 1
            continue;
        } 
        if(s2[i] ==')') {
            arr1 -= 1
            if(arr1 < 0) {
                return false
                break
            }
        }       
    }
    return (arr1 == 0 )? true : false

}

<다른 풀이>

1.변수 사용이 적은 for문을 사용했다.

2.삼항 조건식의 사용으로 if 사용을 줄였다.

function solution(s){
    let cum = 0
    for (let paren of s) {
        cum += paren === '('? 1: -1
        if(cum < 0) {
            return false
        }
    }
    return cum === 0? true: false;
}

< == , ===  비교하기 >

 

문자열도 배열이라서 딱히 변수 하나 더 생성할 필요 x

  •  '==' 연산자를 이용하여 서로 다른 유형의 두 변수의 [값] 비교
  • '==='는 엄격한 비교를 하는 것으로 알려져 있다 ([값 & 자료형] -> true).

 #간단한 예제

🔍 숫자와 불리언 비교

✔ 0값은 false와 동일하므로 -> true 출력

0 == false // true 

✔ 두 피연산자의 유형이 다르기 때문에 ->false