[Algorithm] 괄호 짝 찾기

JiYeon Park·2021년 2월 7일
1

Algorithm

목록 보기
5/5
post-thumbnail

문제

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

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

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

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

풀이

처음 풀이

  1. 먼저 들어온 값을 배열로 변환한다.
  2. "([)]" -> false 이고 "{[]}" -> true 인 조건에 대해서 생각하던 중 for문을 통해 '()', '[]', '{}' 가 인덱스값이 i, i+1로 연속으로 있을 경우에 splice나 delete를 사용하여 해당하는 값을 제거함.
  3. for문이 끝난 배열을 join('')으로 string으로 변환 후 string의 0일 경우에는 true를 return하고 0이 아닐 경우에는 false를 출력합니다.

    문제점

    '(){}[]' 에 대한 값으로는 true 로 정답을 잘 출력하지만 '(())[]' 로 할 경우 0번째와 3번째 값이 남아서 false를 출력하여서 원하는대로 잘 출력되지 않은걸 확인함..

해결 풀이

  1. 먼저 들어온 값을 split()함수를 통해 배열로 변환합니다.
  2. key 값은 ),},] 이고 value 값은 (,{,[ 인 객체를 하나 생성합니다.
  3. for문을 통해 배열의 요소를 돌면서 요소의 값이 (,{,[ 인 경우에는 새로운 배열에 push 합니다.
  4. 요소의 값이 ),},] 인 경우에는 새로운 배열에 해당 괄호를 여는 괄호가 있는 경우에는 새로운 배열에서 해당 여는 괄호를 삭제합니다.
  5. 반복문이 끝난 후 새로 정의했던 배열의 길이가 1이상이면 false를 return하고 아닐 경우 true를 return 합니다.

해결 코드

profile
열심히 공부중인 초보 개발자

0개의 댓글