[codekata]Week2_Day3
문제
s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다. 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.
예를 들어 아래와 같습니다.
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
풀이
- 3종류의 괄호 쌍을 객체에 각각 키, 값으로 저장
- 인자로 받은 문자열의 길이가 홀수라면 유효할 수 있는 경우가 없으므로 우선 false 반환
- 문자열을 순회하면서 저장한 객체의 키로 접근 -> 바로 옆의 문자열이 그 키의 값과 같다면 유효한 괄호쌍이므로 true 반환
function isValid(s) {
// 여기에 코드를 입력해주세요.
const obj = {
'(' : ')',
'[' : ']',
'{' : '}'
}
if (s.length % 2 !== 0) {
return false;
}
for (let i = 0; i < s.length; i++) {
if (obj[s[i]] = s[i+1]) {
return true;
} else return false;
}
}
결과
내 풀이에서는 s = "{[]}"(return true) 같은 케이스를 처리하지 못해서 여섯개 중 두 개의 테스트를 통과하지 못했다. 인자로 받은 문자열에 '()', '[]', '{}'이 있는지 각각 검사한 다음, 있다면 빈 문자열로 바꾸어놓고 최종적으로 빈 문자열이 남은 경우에만 true를 반환하는 식으로 다시 풀어볼 예정이다.