문제 3358 · 비트 I
메신저의 묶음 알림
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 회사의 사내 메신저는 메시지에 들어 있는 느낌표를 보고 강조 알림을 만든다. 다만 작성자가 붙여 넣은 참고 내용에서는 알림을 만들지 않도록 대괄호로 참고 구간을 표시한다. 메시지에는 영문 소문자, 공백, 느낌표, 여는 대괄호와 닫는 대괄호만 들어간다. 메시지의 내용을 고치지 않고 실제로 생성될 강조 알림의 개수만 계산하려 한다. 참고 구간은 여는 대괄호 '['에서 시작하여 그에 대응하는 닫는 대괄호 ']'에서 끝난다. 대괄호는 항상 올바르게 짝을 이루며, 참고 구간 안에 다른 참고 구간이 들어가는 일은 없다. 참고 구간은 여러 개일 수 있고 서로 바로 이어질 수도 있다. 대괄호 사이에 문자가 전혀 없는 빈 참고 구간도 허용한다. 참고 구간 안의 느낌표는 개수와 관계없이 강조 알림을 만들지 않는다. 참고 구간 밖에서는 연속한 느낌표 묶음 하나가 강조 알림 하나를 만든다. 느낌표가 한 개이든 여러 개이든 중간에 다른 문자가 없으면 하나의 묶음이다. 반대로 두 느낌표 사이에 영문 소문자나 공백 또는 대괄호가 있으면 서로 다른 묶음이다. 공백이 여러 개 연속하더라도 각 공백은 느낌표 묶음을 끊는 문자로 취급한다. 참고 구간은 메시지에서 삭제되는 것이 아니다. 따라서 참고 구간 앞뒤에 느낌표가 있더라도 두 느낌표 묶음을 합치지 않는다. 예를 들어 느낌표, 빈 참고 구간, 느낌표가 차례로 있으면 참고 구간 밖의 묶음은 두 개이다. 대괄호 자체는 알림을 만들지 않는다. 메시지 전체에 느낌표가 없거나 모든 느낌표가 참고 구간 안에만 있으면 알림 개수는 0이다. 이 규칙에 따라 메시지 한 줄에서 생성되는 강조 알림의 총개수를 구한다.
입력
첫 줄에 메시지 문자열이 주어진다. 메시지 길이는 1 이상 1,000 이하이다. 사용할 수 있는 문자는 영문 소문자 a부터 z, 공백, !, [, ]이다. 대괄호는 올바르게 짝을 이루고 중첩되지 않는다. 메시지의 맨 앞과 맨 뒤에는 공백이 없다. 별도의 길이 값은 주어지지 않는다.
출력
생성되는 강조 알림의 개수를 정수 하나로 출력한다. 생성되는 알림이 없으면 0을 출력한다.
예제 입력 1
check!! [old!!!] now! !
예제 출력 1
3
예제 입력 2
[!!!] quiet [!]
예제 출력 2
0
예제 입력 3
![]!![a!]!
예제 출력 3
3
힌트 펼치기
- 현재 문자가 참고 구간 안에 있는지 기억한다.
- 참고 구간 밖의 느낌표를 만났을 때 바로 앞 문자가 느낌표가 아니라면 새 묶음이 시작된다.
관련 서재 장
알고리즘 분류
문자열구현풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |