Coding Test
[JS] 프로그래머스 코딩테스트 Lv. 2) 올바른 괄호
JustdoJustin
2022. 10. 27. 18:09
Test 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