문제 4539 · 바이트 I
편의점 묶음 포장표
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 편의점은 행사 상품을 미리 묶어 포장한다. 취급하는 상품 종류는 A, B, C의 세 가지이며, 포장 담당자는 긴 상품 목록 대신 짧은 포장표를 작성한다. 포장표에서 영문 대문자 A, B, C는 각각 해당 상품 한 개를 뜻한다. 여러 항목을 나란히 적으면 각 항목이 나타내는 상품을 모두 넣는다는 뜻이다. 상품의 나열 순서는 최종 개수에 영향을 주지 않는다. 같은 구성을 여러 번 넣을 때는 숫자와 대괄호를 사용한다. 숫자 k 바로 뒤에 대괄호로 감싼 포장표를 적은 k[내용]은 안쪽 내용 전체를 k번 넣는다는 뜻이다. k는 2부터 5까지의 한 자리 정수다. 예를 들어 3[AC]는 A와 C를 각각 세 개씩 넣으라는 뜻이다. 대괄호 안에도 다른 반복 항목을 넣을 수 있으므로 묶음 안에 작은 묶음이 들어가는 구성을 표현할 수 있다. 포장표는 하나 이상의 항목을 이어 붙인 문자열이며, 각 항목은 상품 문자 하나이거나 위에서 정의한 반복 항목 하나다. 모든 대괄호 안에는 하나 이상의 항목이 들어 있다. 숫자가 단독으로 등장하거나 대괄호 바로 앞에 숫자가 없는 경우는 없으며, 대괄호는 항상 올바르게 짝지어져 있다. 포장표에는 공백이나 줄바꿈이 포함되지 않는다. 담당자는 포장을 시작하기 전에 필요한 상품 수를 확인해야 한다. 주어진 포장표 한 개가 나타내는 A, B, C의 총개수를 각각 구한다. 바깥쪽에 있는 반복도 안쪽 묶음 전체에 적용된다. 어떤 종류의 상품이 전혀 등장하지 않으면 그 종류의 개수는 0이다. 묶음을 풀어 쓴 문자열 자체는 출력하지 않으며, 각 상품의 개수만 정수로 출력한다. 중첩 깊이가 제한되어 있어도 풀어 쓴 목록은 매우 길어질 수 있다.
입력
첫째 줄에 포장표 문자열 S가 주어진다. 1 ≤ S의 길이 ≤ 10,000 S에는 A, B, C, 2, 3, 4, 5, [, ]만 등장한다. S는 지문에서 정의한 올바른 포장표다. 동시에 열려 있는 대괄호의 수는 최대 10이다. 각 상품의 총개수는 10,000 × 5^10 이하이므로 64비트 부호 있는 정수로 표현할 수 있다.
출력
A, B, C의 총개수를 이 순서대로 공백으로 구분하여 한 줄에 출력한다.
예제 입력 1
A2[BC]3[A]
예제 출력 1
4 2 2
예제 입력 2
2[A3[BC]A]C
예제 출력 2
4 6 7
예제 입력 3
5[2[C]]
예제 출력 3
0 0 10
힌트 펼치기
- 대괄호 안의 포장표에 대해 상품별 개수 세 개를 반환하는 재귀 함수를 생각한다.
- 반복 항목은 안쪽에서 구한 개수에 반복 횟수를 곱하면 된다.
관련 서재 장
알고리즘 분류
재귀문자열파싱풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |