문제
s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다. 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.
예를 들어 아래와 같습니다.
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
내 Flow
- 각 괄호를 객체로 짝 짓는다.
- 규칙성을 찾았을 때 열린 괄호와 닫히는 괄호가 옳게 짝지어지려면 홀수번째 인덱스에 오는 열린 괄호는 닫히는 괄호가 짝수번째에 와야 하고, 그 반대의 경우도 성립하는 것을 발견했다.
- 해당 경우의 수를 for문으로 i를 넣어 if문으로 true, false를 return하도록 한다.
나의 풀이
function isValid(s) {
const pair = {
"{" : "}",
"[" : "]",
"(" : ")"
}
// 여기에 코드를 입력해주세요.
for (i in pair) {
let odd = i%2 === 1;
let even = i%2 === 0;
if (s[i] == odd && s[i+1] == even) {
return true
} else if (s[i] == even && s[i+1] == odd) {
return true
} else {
return false
}
}
}
💬 놀랍게도 test 6개 중 5개를 통과했다. (...) 하지만 더이상 풀리지 않아 결국 구글링을 했는데 획기적인 풀이를 찾았다.
다른 사람 풀이
function isValid(s) {
while(s.includes("()") || s.includes("[]") || s.includes("{}")) {
s = s.replace("()", "");
s = s.replace("[]", "");
s = s.replace("{}", "");
}
return s === '' ? true : false;
}
참고
'알고리즘 > 코드카타' 카테고리의 다른 글
Week2 - Day5 (Javascript) (0) | 2022.07.15 |
---|---|
Week2 - Day4 (Javascript) (0) | 2022.07.15 |
Week2 - Day2 (Javascript) (0) | 2022.07.14 |
Week2 - Day1 (Javascript) (0) | 2022.07.11 |
Week1 - Day5 (Javascript) (0) | 2022.07.07 |