BoJ 16815 - Star in Parentheses [with Python / 문제 한국어로 번역]

ssook·2023년 9월 1일
0

BoJ 문제기록

목록 보기
6/29

📍 문제

문제

주어진 문자열 SS별표(*)가 삽입된 균형잡힌 괄호입니다.

모든 균형잡힌 괄호들은 아래와 같은 규칙에 의해 구성됩니다!

  1. 빈 문자열은 균형잡힌 괄호입니다.
  2. 두 개의 균형잡힌 괄호를 연결하면 균형잡힌 괄호가 됩니다.
  3. 만약, T가 균형잡힌 괄호라면 (, T, )를 이 순서대로 연결하면 됩니다. 즉, 이 순서는 균형잡힌 괄호가 됩니다.
    예를 들어, ()()와 (()())는 균형잡힌 괄호입니다. )(와 )()(()는 균형잡힌 괄호가 아닙니다!

여러분이 해야 할 일은 별표(*) 주변에 균형잡힌 괄호의 쌍을 얼마나 있는지 세는 것입니다.

S의 i번째 문자를 S_i로 나타낸다고 가정 후,
SlS_lSrS_r 쌍 (l<r)에서 별표 기호를 무시했을 때 그 사이의 문자열이 균형잡혔다면,
해당 문자열 쌍을 매칭 괄호 쌍이라고 합니다.

입력

입력은 아래와 같이 하나의 테스트 케이스로 구성됩니다.
S
SS는 정확히 한 곳에 별표(*)가 삽입된 균형잡힌 괄호 문자열입니다. SS의 길이는 1에서 100 사이입니다.

출력

정답을 한 줄로 출력해주세요.


📍 아이디어

균형 잡힌 괄호 문제이기 때문에 stack으로도 풀 수 있지만,
굳이 stack이 아니더라도
* 왼쪽의 부분 문자열을 구한 후 해당 부분 문자열을 기준으로 괄호의 수를 카운팅하는 것이
가장 중요한 포인트이다.

나의 경우에는 * 문자의 위치를 기준으로 왼쪽 부분 문자열을 추출한 다음,
왼쪽 부분 문자열에서 여는 괄호와 닫는 괄호의 수를 세어 괄호 쌍의 차이를 출력하는 방식으로 구현하였다.


📍 제출 코드


s = input()

star = s.index('*')
left_sub_string = s[:star]
res = left_sub_string.count('(') - left_sub_string.count(')')

print(res)
profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

0개의 댓글