[leetcode] Maximum Nesting Depth of the Parentheses

·2024년 4월 4일
0

코딩

목록 보기
18/45

문제

  • 문제 링크
  • VPS(valid parentheses string)인 문자열 s가 주어질 때, 가장 깊은 depth를 구해야 한다.
    • VPS는 아래 조건을 만족한다.
      • 빈 문자열("")일 수 있다.
      • "(", ")"이 아닌 단일 문자열일 수 있다.
      • VPS인 AB가 있을 때, AB도 VPS이다.
      • A가 VPS일 때, (A)도 VPS이다.
    • VPS의 depth는 아래를 참고할 수 있다.
      • ()는 depth가 1이다.
      • ()()는 최대 depth가 1이다.
      • ()(())는 최대 depth가 2이다.
  • 제약 조건
    • 문자열 길이: 1 <= s.length <= 100
    • 주어지는 문자열 s에는 0-9 숫자와 +, -, *, /, (, ) 가 포함될 수 있다.
    • 주어지는 문자열 s는 VPS임이 보장된다.

풀이

풀기 전

  • 문제 설명은 긴데, 결국 중첩된 괄호 안에서 가장 깊은 지점을 찾으면 된다.
  • 이미 주어지는 문자열이 VPS임을 만족하기 때문에, 여는 괄호('(')를 만났을 땐 깊이가 깊어지고 닫는 괄호(')')를 만났을 땐 깊이가 얕아진다. 문자열을 순회하며 가장 깊은 지점을 찾으면 된다.

코드

class Solution {
    public int maxDepth(String s) {
        int ans = 0;

        int nowDepth = 0;  // 현재 깊이를 저장한다.
        char[] chars = s.toCharArray();  // 문자열을 배열로 변환하고 순회한다.
        for (int i=0; i<chars.length; i++) {
        	// 여는 괄호를 만나면 현재 깊이를 증가시키고, 가장 깊은 지점인지 확인한다.
            if (chars[i] == '(') {
                nowDepth++;
                ans = Math.max(ans, nowDepth);
            } else if (chars[i] == ')') {  // 닫는 괄호를 만나면 현재 깊이를 감소시킨다.
                nowDepth--;
            }
        }

        return ans;
    }
}

푼 후

  • 푸는 방법은 간단해서 어렵지 않게 풀었다.
profile
개발 일지

0개의 댓글