-
[프로그래머스] 올바른 괄호 JavascriptFrontend/Algorithm 2022. 3. 17. 21:59
문제설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
s answer "()()" true "(())()" true ")()(" false "(()(" false ✏️ 첫 풀이 방식
function solution(s){ var answer = true; let braces = s.split(","); let sum = 0; braces.forEach((brace) => { if(brace[0] === ")"){ answer = false; } else { for(let i=0; i < brace.length; i++) { if(brace[i] === "("){ sum++; } else { sum--; if(sum <0){ answer = false; } } } if(sum !== 0) { answer = false; } } }) return answer; }
처음 내가 작성한 풀이는 주어진 s를 배열로 만들어 forEach로 순회하여 sum을 구해 sum의 합이 0보다 작을 때 또는 최종 sum이 0이 아닐 때 answer를 false로 반환하도록 했다. 어딘가 간결하지 못하고 중첩문으로 보기 어려운 코드가 되었다.
🔍 개선된 풀이 방식
function solution(s){ let count = 0; for(const brace of s) { if(brace === "("){ count++; } else { if(count === 0) { return false; } count--; } } return count === 0; }
일단 변수명도 sum보다 count가 더 직관적이라는 생각이 들어 수정했다. for... of 문법을 이용해 s를 배열로 변경하는 작업을 하지 않고도더 효율적으로 s를 순회할 수 있었다.
처음부터 좋은 코드를 짜긴 어렵지만 이렇게 계속 좋은 코드를 보면서 개선해나가면 언젠가 나도 이렇게 짤 수 있지 않을까🤔
어떤 알고리즘 방식을 어떻게 효율적으로 사용할 수 있을지 많이 고민해보자!
반응형'Frontend > Algorithm' 카테고리의 다른 글
[프로그래머스] 멀리 뛰기 javascript (0) 2022.06.17 [프로그래머스] 신고 결과 받기 javascript (0) 2022.04.12 [프로그래머스] 신규 아이디 추천 javascript (0) 2022.04.08 [프로그래머스] 완주하지 못한 선수 javascript (0) 2022.04.04 [프로그래머스] 예산 Javascript (0) 2022.04.02