문제 3023 · 비트 IV
서버 상태 알림 줄이기
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
게임 서버는 일정한 간격으로 자신의 상태를 확인하고, 확인한 상태를 한 글자로 기록한다. 상태를 나타내는 글자는 영어 대문자 A부터 Z까지 중 하나다. 각 글자가 어떤 상태를 뜻하는지는 서버 내부에서 정해져 있으며, 이번 작업에서는 글자의 의미를 해석할 필요가 없다. 기록에 적힌 글자의 순서는 상태를 확인한 시간 순서와 같다. 운영 화면에 원래 기록을 그대로 표시하면 같은 상태가 오래 유지되는 동안 같은 글자가 여러 번 반복된다. 운영 담당자는 상태가 바뀐 흐름을 쉽게 볼 수 있도록 기록을 짧은 알림 문자열로 바꾸기로 했다. 알림 문자열에는 첫 번째 기록을 반드시 넣는다. 두 번째 기록부터는 바로 앞의 원래 기록과 다른 글자인 경우에만 그 글자를 알림 문자열의 끝에 넣는다. 바로 앞의 원래 기록과 같은 글자인 경우에는 아무 글자도 넣지 않는다. 이 규칙은 연속해서 같은 상태가 기록된 구간마다 글자 하나만 남기는 것과 같다. 같은 글자가 기록 전체에서 한 번만 나타나도록 만드는 규칙은 아니다. 어떤 상태가 끝난 뒤 다른 상태를 거쳐 다시 나타났다면, 다시 나타난 상태도 새로운 알림으로 남겨야 한다. 글자를 알파벳 순서로 정렬하거나 서로 떨어져 있는 구간을 합쳐서도 안 된다. 예를 들어 원래 기록이 CCCAACC라면 처음의 C 세 개는 C 하나가 되고, 이어지는 A 두 개는 A 하나가 되며, 마지막 C 두 개도 C 하나가 된다. 따라서 알림 문자열은 CAC다. 각 구간의 길이를 숫자로 적거나 구간 사이에 구분 기호를 넣지는 않는다. 원래 기록은 한 글자 이상이므로 알림 문자열이 비어 있는 경우는 없다. 모든 기록이 같은 글자라면 알림 문자열에는 그 글자 하나만 남는다. 시간 순서대로 기록된 문자열이 주어질 때, 위 규칙으로 만든 알림 문자열을 출력하는 프로그램을 작성한다.
입력
첫째 줄에 기록의 길이인 정수 N이 주어진다. 둘째 줄에 길이가 정확히 N인 문자열 S가 주어진다. 1 ≤ N ≤ 1,000 S는 영어 대문자 A부터 Z까지로만 이루어져 있으며 공백을 포함하지 않는다.
출력
같은 상태가 연속된 각 구간에서 글자 하나씩만 남긴 알림 문자열을 한 줄에 출력한다. 글자 사이에 공백을 넣지 않는다.
예제 입력 1
12 QQQWWEQQQERR
예제 출력 1
QWEQER
예제 입력 2
5 MMMMM
예제 출력 2
M
예제 입력 3
7 ABACABA
예제 출력 3
ABACABA
힌트 펼치기
- 첫 글자를 남기고, 각 위치의 글자가 바로 앞 글자와 다를 때만 결과에 추가한다.
관련 서재 장
알고리즘 분류
문자열구현풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |