def solve(data: str) -> int:
result = 0
for x in range(len(data)-1):
if data[x:x+2] == '(|' or data[x:x+2] == '|)' or data[x:x+2] == '()':
result += 1
return result
T = int(input())
for test_case in range(1, T + 1):
s = str(input())
print(f'#{test_case} {solve(s)}')
def count_balls(s):
open_count = 0
balls_needed = 0
for char in s:
if char == '(':
open_count += 1
elif char == ')':
if open_count == 0:
balls_needed += 1
else:
open_count -= 1
balls_needed += open_count
return balls_needed
# 테스트 케이스 수 입력
T = int(input())
for _ in range(T):
# 문자열 입력
S = input()
result = count_balls(S)
print(result)
위의 코드에서 count_balls 함수는 문자열 s에서 잡초를 제거하여 초원에 놓을 수 있는 공의 최소 개수를 계산하는 함수입니다. 이 함수는 문자열을 한 글자씩 확인하면서 열린 괄호 (가 나오면 open_count 변수를 증가시키고, 닫힌 괄호 )가 나오면 open_count 변수를 감소시킵니다. 만약 닫힌 괄호를 만났는데 open_count가 0이라면 해당 공은 다른 공과 겹치지 않으므로 공의 개수를 추가로 늘립니다. 이렇게 잡초를 제거한 후에도 남아있는 open_count는 겹치지 않는 열린 괄호의 개수를 의미하므로 이를 공의 개수에 더해줍니다. 최종적으로 구해진 공의 개수가 최소 개수가 됩니다.
ChatGPT Code: 위 코드의 전체 시간 복잡도는 O(N), 여기서 N은 문자열의 길이입니다.
코드에서 문자열을 한 글자씩 확인하면서 반복문을 실행하므로 문자열의 길이에 비례하는 시간이 소요됩니다. 따라서 코드의 전체 시간 복잡도는 O(N)입니다.
주요한 작업은 문자열을 한 글자씩 확인하면서 괄호를 처리하는 부분이며, 이 작업은 입력 문자열의 길이에 선형으로 비례합니다. 따라서 코드의 시간 복잡도는 입력 문자열의 길이인 O(N)입니다.
내 코드: O(N)
문제 효율성 같다.