문제 3689 · 바이트 V
우편 보관함 접근 심사
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 우체국의 보안 담당자는 전자 우편 보관함에 들어온 작업 요청을 심사한다. 직원의 역할은 1번, 2번, 3번의 세 종류이며, 보관함은 1번부터 M번까지 있다. 작업 종류도 세 가지다. 1번 작업은 보관 내역 조회, 2번 작업은 우편물 등록, 3번 작업은 우편물 인계다. 각 요청에는 직원의 역할 번호, 대상 보관함 번호, 작업 번호가 기록되어 있다. 역할별 기본 권한은 0 이상 7 이하의 정수 하나로 주어진다. 이 정수는 허용된 작업에 대응하는 값들을 더해 만든다. 1번 작업의 값은 1, 2번 작업의 값은 2, 3번 작업의 값은 4다. 예를 들어 기본 권한이 5이면 1번과 3번 작업을 허용하며, 0이면 어떤 작업도 허용하지 않는다. 각 보관함에는 길이가 정확히 3인 별도 규칙 문자열이 있다. 문자열의 첫째, 둘째, 셋째 문자는 각각 1번, 2번, 3번 작업에 적용된다. 문자 A는 역할의 기본 권한과 관계없이 허용한다는 뜻이고, D는 기본 권한과 관계없이 거부한다는 뜻이다. 문자 I는 해당 역할의 기본 권한을 그대로 적용한다는 뜻이다. 보관함에는 별도로 봉인 상태도 기록된다. 봉인 상태가 1이면 보안 점검 중이므로 모든 요청을 거부한다. 이 규칙은 별도 규칙 문자열보다 우선한다. 봉인 상태가 0일 때만 작업에 해당하는 문자를 확인하고, 그 문자가 I일 때만 역할의 기본 권한을 확인한다. 요청은 주어진 순서대로 각각 독립적으로 판정한다. 요청을 허용해도 실제 우편물 수나 권한 정보는 바뀌지 않으며, 앞선 요청의 결과는 다음 요청에 영향을 주지 않는다. 역할별 기본 권한과 보관함별 설정, 요청 목록이 주어질 때 각 요청을 허용할지 판정하는 프로그램을 작성한다. 허용이면 ALLOW, 거부이면 DENY를 출력한다.
입력
첫째 줄에 보관함 수 M과 요청 수 Q가 공백으로 구분되어 주어진다.
둘째 줄에 역할 1, 2, 3의 기본 권한 P_1, P_2, P_3이 주어진다.
다음 M개 줄에는 보관함 번호 순서대로 규칙 문자열 S_b와 봉인 상태 L_b가 주어진다. S_b는 A, D, I로만 이루어진 길이 3의 문자열이다.
다음 Q개 줄에는 요청의 역할 번호 R, 보관함 번호 B, 작업 번호 O가 주어진다.
문자열을 제외한 모든 입력값은 정수다. 1 ≤ M ≤ 1,000, 1 ≤ Q ≤ 20,000, 0 ≤ P_r ≤ 7, L_b ∈ {0, 1}, 1 ≤ R ≤ 3, 1 ≤ B ≤ M, 1 ≤ O ≤ 3이다.
출력
입력된 요청 순서대로 Q개의 줄을 출력한다. 각 줄에는 해당 요청이 허용되면 ALLOW, 거부되면 DENY를 대문자로 출력한다.
예제 입력 1
3 6 1 3 7 IAI 0 DII 0 AAA 1 1 1 2 1 1 3 2 2 1 2 2 2 3 3 1 3 2 3
예제 출력 1
ALLOW DENY DENY ALLOW DENY ALLOW
예제 입력 2
1 3 0 2 4 AID 0 1 1 1 2 1 2 3 1 3
예제 출력 2
ALLOW ALLOW DENY
힌트 펼치기
- 봉인 상태, 보관함의 별도 규칙, 역할의 기본 권한 순서로 확인한다.
- 작업 번호 O에 대응하는 권한 값은 2의 O-1제곱이다.
알고리즘 분류
구현문자열비트마스크풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |