문제
- 문제 링크
- VPS(valid parentheses string)인 문자열 s가 주어질 때, 가장 깊은 depth를 구해야 한다.
- VPS는 아래 조건을 만족한다.
- 빈 문자열(
""
)일 수 있다.
"("
, ")"
이 아닌 단일 문자열일 수 있다.
- VPS인
A
와 B
가 있을 때, 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;
}
}
푼 후