오늘 뭐했냐/기억하면 좋을 문제들

올바른 괄호

스스로에게 2023. 10. 17. 18:33

프로젝트 때문에 바쁘다가 오랜만에 풀어보는 알고리즘 문제이다. 

 

올바른 괄호 https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

내가 생각한 문제의 핵심은 

  1. 시작은 반드시 "("
  2. "("와 ")" 개수가 맞아야 한다.

따라서 제출한 답은

function solution(s) {
    if (s[0] === ")" || s.length % 2 !== 0) return false

    let arr = s.split("")
    let count = 0
    for (i = 0; i < arr.length; i++) {
        if (count === 0 && arr[i] === ")") return false
        if (arr[i] === "(") {
            count++
        } else { count-- }
    }

    return count === 0 ? true : false
}

이렇게 제출했다. 

 

시작이 ")" 이거나 글자수가 홀수이면 바로 flase를 리턴하고, 문자열을 배열로 바꾼 다음 반복문으로 처리했다. 이것도 통과는 했지만 다른 사람의 풀이를 보면은 

 

// 다른 사람 풀이 
function solution2(s) {
    let cum = 0
    // 이터러블이니까 for of 문으로 처리
    for (let paren of s) {
        cum += paren === '(' ? 1 : -1
        // ")" 로 시작하면 음수가 되어 false
        if (cum < 0) {
            return false
        }
    }
    return cum === 0 ? true : false;
}

 

  • 문자열도 이터러블이라 배열로 바꿀 필요가 없다. 오랜만에 풀어서 이런 것도 활용하지 못했다. 
  • 삼항 연산자를 활용하여 보다 깔끔하게 반복문을 처리했다. 이것도 전에 if else면 삼항 연산자를 늘 생각했는데 잊고 있었다.
  • ")"로 시작하면 음수가 되어 바로 리턴을 시키는 센스가 좋았다. 

 

물론 나도 짝수가 아니면 리턴 시키는 점에서 조금 나은 부분도 있다. 알고리즘 까먹지 않게 풀어줘야겠다.

 

'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글

영어 끝말잇기  (0) 2023.10.17
피보나치 수  (0) 2023.10.17
sort() 활용  (0) 2023.06.28
스택을 사용하는 문제  (0) 2023.06.25
생각을 넓히자  (0) 2023.06.23