문제 4655 · 킬로 II
회의실 표시판의 분할 기록
댓글 0| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms | 측정하지 않음 | 0 | 0 | 0 | 0.00% |
문제
회의실 앞의 전자 표시판은 하루의 운영 시간을 길이가 같은 N개의 시간 칸으로 나누어 보여 준다. 각 시간 칸에는 예약이 없다는 뜻의 0 또는 예약이 있다는 뜻의 1이 기록되어 있다. 표시판 제어기는 이 기록을 보관할 때 정해진 분할 절차를 사용한다. N은 2의 거듭제곱이므로, 길이가 2 이상인 모든 처리 구간을 길이가 같은 두 구간으로 나눌 수 있다. 처음에는 N개의 시간 칸 전체를 하나의 처리 구간으로 잡는다. 처리 구간 안의 값이 모두 같으면 그 구간에 대한 보관 카드 한 장을 만들고 처리를 끝낸다. 카드에는 구간의 상태와 시작 위치, 길이를 적는다. 구간 안에 0과 1이 모두 있다면 그 구간 자체의 카드는 만들지 않는다. 대신 구간을 앞쪽 절반과 뒤쪽 절반으로 나누고, 각 절반에 똑같은 절차를 적용한다. 시간 칸 하나로 이루어진 구간은 언제나 값이 모두 같은 구간이다. 서로 이웃한 두 구간의 상태가 같더라도 이미 만들어진 카드를 나중에 합치는 작업은 하지 않는다. 어떤 구간을 나눌지는 오직 그 구간 안에 두 상태가 모두 있는지에 따라 결정된다. 또한 분할 위치를 임의로 옮기거나, 앞쪽과 뒤쪽의 길이를 다르게 정할 수 없다. 이 규칙에 따라 모든 시간 칸은 정확히 한 장의 최종 카드에 포함된다. 보관 공간을 계산하기 위해서는 카드 장수뿐 아니라 카드가 만들어진 깊이도 필요하다. 전체 구간의 깊이는 0이고, 구간을 한 번 나눌 때마다 자식 구간의 깊이는 부모보다 1 커진다. 카드 한 장이 차지하는 보관 단위는 그 카드의 깊이에 1을 더한 값이다. 최종적으로 만들어지는 0 카드의 장수, 1 카드의 장수, 모든 카드의 보관 단위 합을 구한다. 카드의 실제 시작 위치와 길이는 출력하지 않는다.
입력
첫째 줄에 정수 N이 주어진다. N = 2^p를 만족하는 정수 p가 존재하며 0 ≤ p ≤ 17이다. 둘째 줄에 길이가 정확히 N인 문자열 S가 주어진다. S의 각 문자는 0 또는 1이며, 왼쪽부터 시간 순서대로 표시판의 상태를 나타낸다.
출력
0 카드의 장수, 1 카드의 장수, 모든 카드의 보관 단위 합을 순서대로 공백으로 구분하여 한 줄에 출력한다. 특정 상태의 카드가 없으면 해당 장수는 0으로 출력한다.
예제 입력 1
8 00001101
예제 출력 1
2 2 13
예제 입력 2
1 1
예제 출력 2
0 1 1
예제 입력 3
4 0101
예제 출력 3
2 2 12
힌트 펼치기
- 구간이 한 상태로만 이루어졌는지 빠르게 확인하고, 두 상태가 섞인 구간만 절반으로 나눈다.
알고리즘 분류
분할 정복누적 합풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
댓글 0
로그인하면 댓글을 쓸 수 있습니다.
댓글 접기·펼치기
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| JavaScript | 브라우저 JavaScript | 1000ms / 테스트 | 측정하지 않음 |
| TypeScript | TypeScript 5.9.3 | 1000ms / 테스트 | 측정하지 않음 |
| Python 3 | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음 |
| C | YoWASP Clang 22 | 2000ms / 테스트 | 측정하지 않음 |
| C++ | YoWASP Clang 22 / libc++ | 2000ms / 테스트 | 측정하지 않음 |
| Java | OpenJDK javac + TeaVM (Java 21 문법) | 3000ms / 테스트 | 측정하지 않음 |
| Lua | Wasmoon 1.16.0 / Lua 5.4 | 3000ms / 테스트 | 측정하지 않음 |
| Ruby | Ruby 3.4 / ruby.wasm 2.10.1 | 5000ms / 테스트 | 측정하지 않음 |
| Scheme | BiwaScheme 0.8.3 | 5000ms / 테스트 | 측정하지 않음 |
| Prolog | SWI-Prolog / swipl-wasm 8.2.5 | 5000ms / 테스트 | 측정하지 않음 |
| Perl | Perl 5.28 / WebPerl 0.09-beta | 5000ms / 테스트 | 측정하지 않음 |