문제 4091 · 바이트 I
운동 기록에 따른 무게 조절
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
헬스장의 한 운동 기구는 이용자의 운동 결과를 순서대로 읽고 다음 운동에 사용할 무게를 자동으로 조절한다. 관리자는 하루 동안의 기록을 다시 처리하여 마지막 무게와 사용하도록 설정된 무게의 범위를 확인하려고 한다. 모든 무게는 정수이며, 기구가 설정할 수 있는 무게는 최저 무게 L 이상 최고 무게 U 이하다. 기록을 처리하기 전의 무게는 W이고, 성공 연속 횟수와 실패 연속 횟수는 모두 0이다. 운동 결과는 성공을 뜻하는 O와 실패를 뜻하는 X 중 하나다. O를 읽으면 성공 연속 횟수를 1 늘리고 실패 연속 횟수를 0으로 만든다. 그 결과 성공 연속 횟수가 A가 되면 현재 무게를 P만큼 올린 뒤, 두 연속 횟수를 모두 0으로 만든다. X를 읽으면 실패 연속 횟수를 1 늘리고 성공 연속 횟수를 0으로 만든다. 그 결과 실패 연속 횟수가 B가 되면 현재 무게를 Q만큼 내린 뒤, 두 연속 횟수를 모두 0으로 만든다. 무게를 올린 결과가 U보다 크면 U로 설정하고, 내린 결과가 L보다 작으면 L로 설정한다. 경계 때문에 실제 무게가 변하지 않더라도 조절 조건에 도달했다면 두 연속 횟수는 반드시 0으로 돌아간다. 연속 횟수를 초기화한 뒤에는 같은 결과를 다시 세지 않고 다음 결과로 넘어간다. 무게가 바뀌었다는 이유로 이전 기록을 다시 판단하는 일도 없다. 확인할 무게에는 기록을 읽기 전의 초기 무게와 각 결과를 처리한 직후의 무게가 모두 포함된다. 연속 횟수가 조건에 도달하지 않아 무게가 유지된 경우도 그대로 처리한다. 주어진 N개의 결과를 모두 처리한 뒤의 무게, 확인한 무게 중 최솟값, 확인한 무게 중 최댓값을 이 순서대로 구한다. 각 값은 무게 자체만 출력하며, 해당 무게가 나타난 시점이나 횟수는 출력하지 않는다.
입력
첫째 줄에 정수 N, L, U, W, A, B, P, Q가 공백으로 구분되어 주어진다. 1 ≤ N ≤ 100,000, 1 ≤ L ≤ W ≤ U ≤ 1,000,000, 1 ≤ A, B ≤ 100,000, 1 ≤ P, Q ≤ 1,000,000이다. 둘째 줄에 O와 X로만 이루어진 길이 N의 문자열이 주어진다.
출력
마지막 무게, 확인한 무게의 최솟값, 확인한 무게의 최댓값을 공백으로 구분하여 한 줄에 출력한다.
예제 입력 1
10 10 30 20 2 2 7 6 OOOXXOOOXX
예제 출력 1
22 20 28
예제 입력 2
7 5 5 5 1 2 9 4 OXXOOXX
예제 출력 2
5 5 5
예제 입력 3
5 1 100 40 6 6 10 10 OXOOX
예제 출력 3
40 40 40
힌트 펼치기
- 현재 무게와 두 종류의 연속 횟수만 유지하면 된다.
- 무게가 경계에 막혀 유지되어도 연속 횟수를 초기화한다.
관련 서재 장
알고리즘 분류
구현시뮬레이션풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |