"X", "(" 및 ")" 세 문자로만 구성된 문자열이 있다고 가정합니다. 문자열에는 균형 잡힌 대괄호가 있으며 일부 "X" 사이에는 중첩된 대괄호가 재귀적으로 있을 수 있습니다. 가장 얕은 깊이부터 가장 깊은 깊이까지 s의 각 괄호 깊이에서 "X"의 수를 찾아야 합니다.
따라서 입력이 s ="(XXX(X(XX))XX)"와 같으면 출력은 [5, 1, 2]
가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 깊이:=-1
- out :=새 목록
- s의 각 c에 대해
- c가 "("와 같으면
- 깊이 :=깊이 + 1
- 그렇지 않으면 c가 ")"와 같을 때
- 깊이 :=깊이 - 1
- 깊이가 out의 크기와 같으면
- 끝에 0 삽입
- c가 "X"와 같으면
- 외부[깊이] :=외[깊이] + 1
- c가 "("와 같으면
- 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(s):depth =-1 out =[] for c in s:if c =="(":depth +=1 elif c ==")":depth -=1 if depth ==len(out):out.append(0) if c =="X":out[깊이] +=1 return outs ="(XXX(X(XX))XX)"print(solve(s))사전>입력
"(XXX(X(XX))XX)"출력
[5, 1, 2]