[JAVA] Lv2. 올바른 괄호

김상윤·2022년 6월 30일
0

연습문제 올바른 괄호


[문제설명]

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
  • '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

[제한사항]

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

[나의 풀이]

1차 풀이

deque를 이용하여 풀이해보았다. (사실 stack을 쓰면 되지만, 파이썬에서 맨날 deque를 쓰던 버릇이 있어서 무의식적으로 deque를 쓰게 되었다..)
먼저 ')'가 가장 처음에 들어오게 되면, 옳지 못한것이므로 조건문으로 필터링해주었다.
그 다음 s의 길이만큼 반복문을 돌면서, '('가 들어오면 이것을 deque에 push해주고, ')'이 들어오면 pop을 시켜주었다. 이때, ')'이 들어왔는데, deque가 비어있었다면, 이것 또한, '('이 없는데 ')'이 위치한 것이므로 '(',')'이 짝이 맞지 않다고 판단하여, false를 리턴시켜주었다.

최종적으로, deque가 비어있다면, true를 비어있지 않다면 짝이 맞지 않는 것이므로 false를 리턴시켜주었다.

그러나..

위 코드와 같이 작성을 하였으나, 테스트케이스 4,5,11,18번에서 통과하지 못하였다.


2차 풀이

곰곰히 생각해보니, 처음에 ')'을 필터링 해주었던, 조건문이 없더라도, for문안의 로직으로 인하여 알아서 판별을 해준다는 것을 알아차리고 기존의 조건문을 제거하여 제출을 해보았다.
앞에서 통과하지 못하였던 테스트케이스에 대해서 제대로 통과한 결과를 보여주었다.

ps. 그렇다 하더라도,, 1차 풀이 자체도 통과하는 로직이라고 보여지는데, 왜 1차 풀이는 안되고 2차 풀이만 통과가 되는지 의문이다. 다시한번 분석을 해보아야겠다.

ps2. 6월 30일에는 안되던 코드가 갑자기 7월 1일에는 잘 통과되었다.. 여튼 1차풀이도 문제 없는 걸로!👍

profile
알고리즘을 아직도 모르겠다

0개의 댓글