문제 4522 · 킬로 V
원형 캠핑장의 빈자리
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 캠핑장에는 원형 산책로를 따라 N개의 야영 구역이 놓여 있다. 구역에는 시계 방향으로 1번부터 N번까지 번호가 붙어 있으며, N번 다음에는 다시 1번이 나온다. 관리인은 함께 온 손님들이 이웃한 구역에 머물 수 있도록, 현재 비어 있는 구역이 가장 길게 이어진 곳을 찾으려 한다. 예약 현황은 길이가 N인 문자열 S로 주어진다. 문자열의 i번째 문자가 마침표 '.'이면 i번 구역이 비어 있고, 샵 '#'이면 이미 예약된 구역이다. 예약된 구역은 새 손님에게 배정할 수 없다. 문자열에는 이 두 종류의 문자만 들어 있으며, 조사하는 동안 예약 현황은 바뀌지 않는다. 관리인이 선택할 수 있는 배정안은 시작 구역 번호와 사용할 구역 수로 정해진다. 시작 구역부터 시계 방향으로 지정한 개수의 구역을 방문했을 때, 방문하는 모든 구역이 비어 있어야 한다. 같은 구역을 두 번 사용할 수 없으므로 사용할 구역 수는 N을 넘을 수 없다. 번호가 N에서 1로 바뀌는 지점은 배정을 끊는 경계가 아니다. 예를 들어 마지막 구역과 첫 구역이 모두 비어 있다면 두 구역을 이어서 사용할 수 있다. 관리인은 사용할 구역 수가 가장 많은 배정안을 선택한다. 최대 개수를 달성하는 시작 구역이 여러 개라면 시작 구역 번호가 가장 작은 배정안을 선택한다. 모든 구역이 비어 있다면 N개 전체를 사용할 수 있으며, 이때도 같은 동점 규칙을 적용한다. 비어 있는 구역이 하나도 없다면 선택 가능한 배정안이 없다고 본다. 문자열 S를 보고 선택한 시작 구역 번호와 사용할 구역 수를 구하는 프로그램을 작성한다.
입력
첫째 줄에 정수 N이 주어진다. 둘째 줄에 길이가 N인 문자열 S가 주어진다. 1 ≤ N ≤ 180,000이다. S의 각 문자는 '.' 또는 '#'이다.
출력
선택한 시작 구역 번호와 사용할 구역 수를 공백으로 구분하여 한 줄에 출력한다. 비어 있는 구역이 없으면 0 0을 출력한다.
예제 입력 1
8 ..##...#
예제 출력 1
5 3
예제 입력 2
7 ..##...
예제 출력 2
5 5
예제 입력 3
3 ###
예제 출력 3
0 0
힌트 펼치기
- 문자열을 두 번 이어 붙이면 끝과 처음에 걸친 빈 구역도 연속한 문자열로 나타난다.
- 시작 위치는 원래 문자열 안에 있어야 하고, 사용하는 길이는 N 이하여야 한다.
관련 서재 장
알고리즘 분류
문자열구현풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |