알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm
JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS
React 강의 듣기
https://github.com/hoinlee-moi/React_prac
오늘알고리즘
올바른 괄호 - https://school.programmers.co.kr/learn/courses/30/lessons/12909
function solution(s){
if(s[0]===")"||s[s.length-1]==="("||s.length===1) return false
let braket = [];
for(let i=0; i<=s.length-1;i++ ){
braket.push(s[i])
if(braket[braket.length-2]+braket[braket.length-1]==="()"){
braket.pop()
braket.pop()
}
}
return braket.length===0?true:false
}
먼저 내 코드는 효율성 테스트를 통과해서 정답으로 나오긴 했지만 여러번 시도할 경우 때에 따라 실패가 뜨기도 한다.
안정성이 낮고 코드 또한 비효율이라고 볼 수 있다.
s의 처음이나 끝이 )시작하거나 (로 끝나고 s의 길이가 1이면 false를 return하도록 정해놨다.braket이라는 배열을 만들고 s를 for문을 이용해 각 글자들을 braket이란 배열에 넣었다.braket의 끝부분을 확인하여 ()가 완성된다면 제거하는 식으로 처리하였다.하지만 비효율적인 게 있었고 아래 식을 따라하니 엄청 빠르게 통과 되었고 효율성 테스트도 매우 좋았다.
function solution(s) {
if(s.length === 1 || s[0] === ")") return false;
let p = 0;
for(let i = 0 ; i < s.length ; i++) {
if(s[i] === "(") {
p++;
} else {
if(p < 1) return false;
p--;
}
return p > 0 ? false : true;
}
if문을 걸어놓았다.for문을 이용해 반복을 올리는데 괄호의 시작은 (부터이니 if를 이용해 (일 때 변수 p를 증가시키고p를 감소시키도록 하였다.((가 아니라면 )이니 )일 때 감소)p가 1보다 작다면 false를 return하도록 했는데 이는 p가 0일때는 괄호의 시작인데 괄호의 시작은 (이기 때문에 else를 통해 왔다는 건 )로 괄호가 시작했다는 뜻으로 짝지어지지 않는다는 뜻이다.