문제
s는 여러 괄호들로 이루어진 String 인자입니다.
s가 유효한 표현인지 아닌지 true/false로 반환해주세요.종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다.
아래의 경우 유 효합니다.
한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다.
괄호 순서가 맞아야 한다.예를 들어 아래와 같습니다.
s = "()" return true s = "()[]{}" return true s = "(]" return false s = "([)]" return false s = "{[]}" return true
결국....한참 짱구를 굴려보았지만,,,실패하고
승옥님의 힌트를 듣고 다시 풀어보았다
우선 {,(,[ 왼쪽방향과 },),]오른쪽방향의 객체를 나눠서 분리한 뒤, 입력값 s를 포문돌리면서 왼쪽방향이 들어올 경우 빈 배열에 넣는다.
이후 다음 번에 오른쪽방향이 들어오면, 배열의 마지막과 방금들어온 오른쪽방향 괄호와 세트가 맞다면 배열에서 제거한다.
포문이 다 돌고난 뒤 배열에 아무것도 없으면 return true;
function isValid(s) { // 여기에 코드를 입력해주세요. const left = { "{": 0, "[": 1, "(": 2, }; const right = { "}": 0, "]": 1, ")": 2, }; let stack = []; console.log(s.length); if (!(s.length % 2 === 0)) { //길이가 홀수이면 참일수없으니 return false; } for (let letter of s) { // console.log(letter); if (Object.keys(left).indexOf(letter) > -1) { stack.push(letter); } else { if (stack.length < 1) { // '}}' 요렇게 들어오는 경우 대비 return false; } let finalLeft = stack[stack.length - 1]; if (left[finalLeft] === right[letter]) { stack.pop(); } } } // console.log(stack.length > 0); return stack.length > 0 ? false : true; } console.log(isValid("))"));
- 빈 배열에
.push() .pop()
뒤에서부터 채워지고 뒤에서 부터 뺀다.- 요번거는 코딩문법 어려움 보다...네비게이션 하는데 어려움이 있었다! 다음에 비슷한 문제가 나오면 한방에 해결하즈아