s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다. 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.
예를 들어 아래와 같습니다.s = "()" return true s = "()[]{}" return true s = "(]" return false s = "([)]" return false s = "{[]}" return true
function isValid(s) {
// 여기에 코드를 입력해주세요.
const obj = {
"(" : 1,
")" : 1,
"[" : 2,
"]" : 2,
"{" : 3,
"}" : 3
}
const arr = s.split("").map((el)=>obj[el]);
console.log(arr)
for(let i = 0; i < arr.length; i++){
if(arr[i] !== arr[i+1]){
if([...arr].reverse() === arr){
return true
}else{
return false
}
}else{
return true
}
}
}
는.... fail...!!ㅠㅠㅠㅠ
결국 해결하지 못해 재상님께 도움을 요청했다.
function isValid(s) {
let obj = {
‘(’ : ‘)’,
‘[’ : ‘]’,
‘{’ : ‘}’
}
let match = [s[0]]
for(let i = 1 ; i < s.length ; i++){
if(obj[match[match.length-1]] === s[i]){
match.pop();
} else {
match.push(s[i]);
}
}
return match.length === 0? true : false
}
console.log(isValid(‘[{}()]‘))
//obj[‘[’] === s[1] -> ‘]’ === ‘{’ 틀리니까 추가
// match[‘[’, ‘{’]
//obj[‘{’] === s[2] -> ‘}’ === ‘}’ 같으니까 빼기
// match[‘[’]
//obj[‘[’] === s[3] -> ‘]’ === ‘(’ 틀리니까 추가
// match[‘[’, ‘(’]
//obj[‘(’] === s[4] -> ‘)’ === ‘)’ 같으니까 빼기
//match[‘[’]
//obj[‘[’] === s[5] -> ‘]’ === ‘]’ 같으니까 빼기
//match []
//match = [] 빈배열 됨.
module.exports = { isValid };
답을 보고도 이해하는데에 시간이 좀 걸렸다.
객체로 접근한 것은 같은데 아이디어 자체가 다른 느낌이었다...!
오늘도 재상님한테 많이 배우고 갑니당~~!