https://programmers.co.kr/learn/courses/30/lessons/12909
function solution(s) {
var answer = true;
let sArr = s.split('');
// 주어진 s가 짝수가 아니거나 처음이 '(' 마지막이 ')' 로 끝나지 않는 경우 x
if (s.length % 2 !== 0 || sArr[0] !== '(' || sArr[s.length - 1] !== ')') {
answer = false;
return answer;
}
// '(' ')' 의 갯수가 동일하지 않은경우 x
let openLetterCount = 0;
let closeLetterCount = 0;
sArr.map(x => {
x === '(' ? openLetterCount++ : closeLetterCount++;
})
if (openLetterCount !== closeLetterCount) {
answer = false;
return answer;
}
// 문자열에서 괄호가 닫힌 경우를 모두 제거하고 (반복)제거 후 문자열로 통합
sStr = s.split('()').join('');
// 해당 문자열이 () 혹은 없는 경우 true
if (sStr === '()' || sStr === '') {
return answer;
}
// false 인 경우는 '()))((()' 이런 경우 이므로 바로 위코드를 수행하면 ')))(((' 이렇게 되어 거른다.
if (sStr[0] !== '(' || sStr[sStr.length - 1] !== ')') {
answer = false;
return answer;
}
return answer;
}
let s = "()))((()";
console.log(solution(s));
먼저 실행시간을 단축시키기위해서 답에 합당한 조건들을 살펴보자
(
여야한다.)
여야한다.(
)
각각 갯수가 같아야한다.()
인 형태를 문자열에서 반복적으로 지웠을 때 아무것도 남지 않아야한다.위 조건들은 일부 겹치는 것들이지만 그래도 계산수가 낮은 순으로서 조금이라도 빠르게 답을 알수 있다.
string.split('')
: split 안의 문자로 주어진 string을 나눠서(나뉠때 split안의 문자로 나눠질때까지 계속 나눈다) 배열로 반환한다. ''
로 나누게 되면 문자하나하나 배열에 넣어 반환된다. arr.join('')
: 주어진 배열을 join안에 주어진 문자를 이용해서 붙여서 string으로 반환한다. ''
으로 붙인다면 그냥 전체 배열을 문자열로 변환하는것이나 마찬가지이다.