← 실전 문제

인용 구간을 제외한 괄호 검사

C++완성형

문자열에서 괄호의 짝을 검사해요. 괄호는 ()와 [] 두 종류예요. 닫는 괄호는 아직 닫히지 않은 가장 최근 여는 괄호와 종류가 같아야 해요.

큰따옴표 "를 만나면 인용 구간이 시작되고, 다음 큰따옴표에서 끝나요. 인용 구간 안의 모든 괄호는 검사하지 않아요. 큰따옴표를 문자로 바꾸는 이스케이프 규칙은 없어요. 소문자와 공백은 어디에 있어도 괄호 검사에 영향을 주지 않아요.

int solution(string text)를 작성해 주세요. 왼쪽부터 검사하다가 짝이 맞지 않는 닫는 괄호를 만나면 그 문자 위치를 반환해요. 위치는 공백·따옴표를 포함해 1부터 세요. 끝까지 읽었는데 인용 구간이나 여는 괄호가 닫히지 않았다면 text의 길이+1을 반환해요. 모두 올바르면 0을 반환해요.

매개변수와 반환값

문자열 길이는 0200이에요. 문자는 소문자 az, 공백, (, ), [, ], 큰따옴표 "만 사용해요. 빈 문자열은 올바른 문자열이에요. 여러 오류가 있어도 검사 중 처음 만난 닫는 괄호 오류를 즉시 반환하며, 나머지를 검사하지 않아요. 반환값은 0~201인 int예요.

예시

  1. a([b])"[(]" → 0: 바깥의 ([b])는 올바르게 닫혀요. 마지막 인용 구간의 [(]는 검사하지 않아요.
  2. ([)] → 3: 세 번째 )에서 가장 최근 여는 괄호는 [이므로 종류가 맞지 않아요.

자동 채점 입력·출력

입력 한 줄 전체가 text예요. 앞뒤 공백도 문자열에 포함돼요. 빈 문자열은 빈 줄이에요. 검사 결과를 한 줄에 출력해요. 아래 하네스가 입력을 매개변수로 바꾸므로 solution만 작성해요.

예시 입력

a([b])"[(]"

예상 결과

0

예시 입력

([)]

예상 결과

3
핵심 개념
  • string-parsing: 인용 구간 안과 밖의 서로 다른 해석 규칙을 적용해요.
  • stack-queue: 가장 최근 여는 괄호와 닫는 괄호를 연결해요.
  • stl-string: 원본 위치 번호를 유지하며 문자열을 순회해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기