s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다. 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.
예를 들어 아래와 같습니다.
s = "()" return true s = "()[]{}" return true s = "(]" return false s = "([)]" return false s = "{[]}" return true
일단 객체로 괄호들을 키와 value로 나누어서 활용해야할 것 같아서 나누긴 했다.
function isValid(s) {
const bracket = {
'(': ')',
'{': '}',
'[': ']'
}
}
하지만 아무리 시간이 흘러도 감을 잡지 못해서 구글링을 통해 reduce와 slice, pop과 push를 사용해서 이 기능을 구현할 수 있다는 힌트를 얻었다.
function isValid(s) {
const bracket = {
'(': ')',
'{': '}',
'[': ']'
}
const remained = s.split('').reduce((ac, cv, i, arr) => {
if (bracket[ac.slice(-1)] === cv) {
ac.pop();
} else {
ac.push(cv)
}
console.log(ac)
return ac;
}, []);
return remained.length === 0;
}
[]
로 출력될 것이다.if문을 만나기 전과 if문을 만난 후를 콘솔 로그로 띄우면 이런 식으로 동작한다.