본문 바로가기

알고리즘 문제풀이/LeetCode

678. Valid Parenthesis String

문제 링크: https://leetcode.com/problems/valid-parenthesis-string/

 

원래는 스택을 써서 풀어야 하는 것 같은 문제인데, 조건 하나가 더 추가된 문제. 괄호 (, ) 외에도 아스터리스크 *가 문자열에 포함된다. 조커처럼 (, ) 또는 공백으로 사용될 수 있고, 이런 상황에서 주어진 문자열이 vaild한지 체크하면 된다.

 

애스터리스크가 어떻게 사용될 수 있을지 모르기 때문에, 매 시점에서 가능한 여는 괄호가 나오면 1 커지고, 닫는 괄호가 나오면 1 작아지는 변수 l_p, r_p를 만들어두고, 애스터리스크가 나오면 l_p는 -1, r_p는 +1을 해준다. l_p, r_p가 각각 여는 괄호가 짝이 지어진 괄호를 제외하고 가질 수 있는 최솟값/최댓값을 가진다고 생각하면 된다.

 

r_p가 0보다 작아지는 구간이 하나라도 생기면 무조건 not vaild한 문자열이다.[모든 *을 (로 사용해도 불가능], 반대로 l_p가 0보다 작아지는 구간이 발생하더라도 0으로 둔다. 최솟값이 0이 될 수는 없기 때문이다.

 

모든 짝이 지어졌다면 l_p가 0이 나와야 하는데, 그렇지 못한다면 not vaild하다고 생각할 수 있다.

 

'알고리즘 문제풀이 > LeetCode' 카테고리의 다른 글

2816. Double a Number Represented as a Linked List  (0) 2024.05.07
739. Daily Temperatures  (0) 2024.02.04
146. LRU Cache  (0) 2023.07.18