s는 여러 괄호들로 이루어진 String 인자입니다.
s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다.
아래의 경우 유효합니다.
한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다.
괄호 순서가 맞아야 한다.
예를 들어 아래와 같습니다.
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
function isValid(s) {
let matching = {
'(': ')',
'[': ']',
'{': '}'
};
let closeArr = [];
let openArr = [];
let sArr = s.split('');
let result = true;
for (let i = 0; i < sArr.length; i++) {
let thisStr = sArr[i];
let closeForOpen = matching[thisStr];
if (closeForOpen) {
openArr.push(thisStr);
closeArr.unshift(closeForOpen);
}
else {
if (thisStr === closeArr[0]) {
closeArr.shift();
openArr.pop();
} else {
result = false;
break;
}
}
}
return result && closeArr.length === 0;
}
종택 타노스의 손길이 다분히 느껴지는 위의 코드.. 여윽시 타노스 코드를 반으로 접어버리셨다....... 아래가 재앙에 가까운 나의 코드다.
function isValid(s) {
let sArr = s.split('');
if (s.length % 2 === 0) {
return checkArr(sArr);
} else {
return false;
};
function checkArr(sArr) {
for (let i=0; i<sArr.length-1; i++) {
if (sArr[i] === "(") {
if ((sArr.indexOf(")")-i) % 2 === 1 || (sArr.lastIndexOf(")")-i) % 2 === 1) {
} else {
return false;
}
} else if (sArr[i] === "[") { // [[]]
if ((sArr.indexOf("]")-i) % 2 === 1 || (sArr.lastIndexOf("]")-i) % 2 === 1) {
} else {
return false;
}
} else if (sArr[i] === "{") {
if ((sArr.indexOf("}")-i) % 2 === 1 || (sArr.lastIndexOf("]")-i) % 2 === 1) {
} else {
return false;
}
} else if (sArr[0] === "}" || sArr[0] === "]" || sArr[0] === ")") {
return false;
}
}
return true;
}
}
접다 말았다고도 적어줘야죠~