문제 5033 · 킬로 IV
메신저 임시 보안 구역
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
사내 메신저의 보안 담당자는 한 사용자에게 적용되는 임시 접근 정책을 검사하고 있다. 메신저에서 검사하는 권한은 메시지 읽기, 메시지 보내기, 첨부 파일 내려받기의 세 가지다. 사용자는 처음에 기본 권한을 부여받으며, 업무 화면에서 보안 구역에 들어가거나 나올 때마다 임시 정책의 적용 상태가 달라진다. 주어진 기록은 한 사용자의 행동을 발생 순서대로 모은 것이다. 권한 묶음은 0부터 7까지의 정수인 마스크로 나타낸다. 값 1은 메시지 읽기, 값 2는 메시지 보내기, 값 4는 첨부 파일 내려받기를 뜻한다. 여러 권한을 포함하는 마스크는 해당 값들을 더한 것이다. 예를 들어 5는 읽기와 내려받기를 포함하고, 0은 아무 권한도 포함하지 않는다. 기본 권한에 없는 권한을 임시 정책으로 새롭게 얻을 수는 없다. ENTER m 기록은 허용 권한 마스크가 m인 새로운 임시 보안 구역에 들어간다는 뜻이다. 이미 다른 구역 안에 있어도 새로운 구역에 들어갈 수 있다. 이때 이전 구역의 정책은 해제되지 않는다. 어떤 권한을 실제로 사용하려면 기본 권한에 그 권한이 포함되어 있고, 현재 들어가 있는 모든 구역의 허용 마스크에도 그 권한이 포함되어 있어야 한다. 임시 구역이 하나도 없다면 기본 권한만 적용한다. LEAVE 기록은 가장 최근에 들어간 구역 중 아직 나오지 않은 구역 하나에서 나온다는 뜻이다. 그 구역의 정책만 해제되며, 더 바깥쪽 구역의 정책은 계속 적용된다. CHECK x 기록은 현재 상태에서 값 x에 해당하는 권한을 사용할 수 있는지 확인한다. CHECK는 권한 상태나 구역 상태를 바꾸지 않는다. 각 확인 결과를 기록 순서대로 출력한다. 기록이 끝날 때 모든 구역에서 나와 있어야 할 필요는 없다.
입력
첫째 줄에 기록 수 N과 기본 권한 마스크 B가 주어진다. N과 B는 정수이며 1≤N≤20,000, 0≤B≤7이다. 다음 N개 줄에 ENTER m, LEAVE, CHECK x 중 하나가 주어진다. m은 0≤m≤7인 정수이고, x는 1, 2, 4 중 하나다. LEAVE는 현재 들어가 있는 임시 구역이 하나 이상일 때만 주어진다. CHECK는 적어도 한 번 주어진다.
출력
CHECK마다 해당 권한을 사용할 수 있으면 ALLOW, 사용할 수 없으면 DENY를 한 줄에 출력한다.
예제 입력 1
9 7 CHECK 4 ENTER 3 CHECK 4 ENTER 1 CHECK 2 LEAVE CHECK 2 LEAVE CHECK 4
예제 출력 1
ALLOW DENY DENY ALLOW ALLOW
예제 입력 2
5 1 ENTER 7 CHECK 2 ENTER 0 CHECK 1 CHECK 4
예제 출력 2
DENY DENY DENY
힌트 펼치기
- 각 구역에 들어간 직후의 실제 권한을 스택에 저장한다.
- 구역에서 나오면 스택의 마지막 상태를 제거하여 이전 상태를 복원할 수 있다.
알고리즘 분류
스택비트 연산풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |