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

천정환·2022년 11월 7일
1

wecode 코드카타

목록 보기
2/5

그떄 그 시절 기억하고 싶은 문제입니다.

오늘은 비슷하게 배열의 짝수를 이용해서 절반으로 나눈뒤 ")","("이 중복된다면 빈배열을 이용한 true 및 false를 리턴한다고 생각을 하고 작성하였는데요.

동기님 풀이식에 감탄을.... 다시 한번 써보겠습니다.




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

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

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

s = "()"
return true

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

s = "(]"
return false

s = "([)]"
return false

s = "{[]}"
return true

이렇게 적혀 있습니다.


동기님께서 작성하신 방법은 만약에 "( )","[ ]","{ }"이 포함되어 있다면????

빈배열을 준다 그러면 리턴값은 진실이고 그외는 거짓이다. 이렇게 간단하게 풀이가 되는거 있죠??

제 풀이식보다 3배는 빠르게 풀수 있어서 감탄했어요.

for (let i =0; i <s.length; i++){
    if (s.includes('()') || s.includes('[]')|| s.includes('{}')){
    이게 무엇일까요??? includes는 포함한다는 뜻을 가지고 있어요. 그래서 3가지 조건인  "(  )","[  ]","{   }"풀이를 이렇게 하였네요.
    
    그다음에는 replace 라는것으로 문자가 있으면 치환해준다는 표현이에요.
    
    그래서 s=s.replace('()', ''); 이렇게 작성하는 이유는 '()"이  있으면 빈배열로 치환해달라 이뜻이에요..우와....
    
    s=s.replace('[]', '');
      s=s.replace('{}', '');
그외 [] , {} 도 있다면 빈배열로 치환해달라는 뜻입니다.

그래서 if문을 쓰고 s가 빈배열이라면 ???? true!! , 빈배열이 아니라면?? false를 뜻하는거죠

정리를하자면??



function isValid(s) {
  
  for (let i =0; i <s.length; i++){
    if (s.includes('()') || s.includes('[]')|| s.includes('{}')){
      s=s.replace('()', '');
      s=s.replace('[]', '');
      s=s.replace('{}', '');
    }
    if (s === ''){
      return true;
    }
  }
  return false;
}
 
이렇게 나옵니다. 오늘도 배워갑니다. 감사합니다.
profile
손가락은 거짓말을 하지 않는다.

0개의 댓글