-
[JS] 프로그래머스 코딩테스트 Lv. 2) 올바른 괄호Coding Test 2022. 10. 27. 18:09Test Explain
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
My Answer (효율성 에러)
function solution(s){ if(s[0]===')'){ return false; } let balance=0; for(let i=0;i<s.length;i++){ if(s[i]==='('){ balance+=1; }else{ balance-=1; if(balance<0) return false; } } return balance===0 ? true : false; } console.log(solution(")()("))
초기값이 0인 변수를 만들어서 문자열의 배열을 돌면서 변수가 음수가 되면 false, 그리고 0일때만 true를 리턴하는 개념은 비슷한데, 채점을 하면 효율성을 문제로 지적한다.
Reference Answer
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; }
문제를 푸는 개념은 비슷하지만, 깔끔하게 코드를 작성한 느낌이다.
function solution(s){ let answer = true; if(s.charAt(0) === ')' || s.charAt(s.length-1) === '(') answer = false; const a = s.split('').filter((s) => s === '(').length; const b = s.split('').filter((s) => s === ')').length; if(a !== b) answer = false; let cntOpen = 0; for(let i = 0; i < s.length; i++) { if(s[i] === '(') cntOpen++; else cntOpen--; if(cntOpen < 0) answer = false; } return answer; }
문자열의 첫번째가 ) 이거나 마지막이 ( 이면 false
( 와 ) 갯수를 각각 세서, 서로 다르면 false
문자열을 돌면서 ( 면 + , ) 면 - 하다가 변수가 - 가 되면 false
크게 3가지 조건을 각각 제시해주었다.
외부 참조 링크
https://jsikim1.tistory.com/251
프로그래머스 코딩테스트 연습 Level 2 - 올바른 괄호 (JavaScript)
프로그래머스 코딩테스트 연습 Level 2 - 올바른 괄호 (JavaScript) Programmers(프로그래머스)의 코딩테스트 연습문제 Level 2 중, [올바른 괄호] 문제를 JavaScript를 사용하여 해결해 보도록 하겠습니다.
jsikim1.tistory.com
'Coding Test' 카테고리의 다른 글
[Python] 문법정리1 - zip(), lambda 함수, for in (0) 2022.11.06 [JS] 프로그래머스 코딩테스트 Lv. 1 ) 나누어 떨어지는 숫자 배열 (0) 2022.11.01 [JS] 프로그래머스 코딩테스트 Lv. 2 ) 최솟값 만들기 (0) 2022.10.24 [JS] 프로그래머스 코딩테스트 Lv. 2 ) 최댓값과 최솟값 (0) 2022.10.24 [JS] 프로그래머스 코딩테스트 Lv. 2 JadenCase 문자열 만들기 (0) 2022.10.23