알고리즘/코드카타

Week2 - Day3 (Javascript)

시럽이 2022. 7. 14. 22:01

문제

s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요.

종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다. 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.

예를 들어 아래와 같습니다.

s = "()"
return true

s = "()[]{}"
return true

s = "(]"
return false

s = "([)]"
return false

s = "{[]}"
return true

 

내 Flow

  1. 각 괄호를 객체로 짝 짓는다.
  2. 규칙성을 찾았을 때 열린 괄호와 닫히는 괄호가 옳게 짝지어지려면 홀수번째 인덱스에 오는 열린 괄호는 닫히는 괄호가 짝수번째에 와야 하고, 그 반대의 경우도 성립하는 것을 발견했다.
  3. 해당 경우의 수를 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;
}

 

 

 

참고

https://hymndev.tistory.com/63

'알고리즘 > 코드카타' 카테고리의 다른 글

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