← 실전 문제

만료 전에 사용하는 접근 권한

Python빈칸 채우기

접근 권한 grants의 각 항목은 [kind, end_day, limit]예요. kind=0 권한은 end_day까지 횟수 제한 없이 허용해요. kind=1 권한은 end_day까지 성공한 허용을 최대 limit번 제공해요. 만료 당일도 허용하고, 거절된 요청은 성공 횟수를 쓰지 않아요.

요청 requests의 [index, day]를 주어진 순서대로 처리해요. 요청 시각이 날짜순이 아닐 수도 있으며 성공 횟수는 요청 처리 순서에 따라 누적해요. solution(grants, requests)가 권한별 성공 횟수를 반환하도록 빈칸을 채워 주세요. 클래스 구조와 요청 처리는 제공되어 있어요.

매개변수와 반환값

  • 권한 수 n은 1100, 요청 수 m은 0500이에요.
  • kind는 0 또는 1, end_day와 day는 01,000, limit는 0500이에요. kind=0이면 limit는 무시해요.
  • index는 0~n-1이며 반환 리스트는 권한 순서의 성공 횟수 n개예요.

예시

  1. grants = [[0, 5, 0], [1, 4, 2]], requests = [[0, 5], [0, 6], [1, 1], [1, 6], [1, 4], [1, 2]]이면 결과는 [1, 2]이에요.
  2. grants = [[1, 2, 1], [1, 0, 0]], requests = [[0, 3], [0, 2], [0, 1], [1, 0]]이면 결과는 [1, 0]이에요.

실행용 입출력

첫 줄에 n m, 다음 n줄에 kind end_day limit, 다음 m줄에 index day를 입력해요. 반환 리스트를 한 줄에 출력해요.

예시 입력

2 6
0 5 0
1 4 2
0 5
0 6
1 1
1 6
1 4
1 2

예상 결과

1 2

예시 입력

2 4
1 2 1
1 0 0
0 3
0 2
0 1
1 0

예상 결과

1 0
핵심 개념
  • oop-class: 클래스는 한 권한의 값과 동작을 묶는 틀이에요. AccessRule(5)를 호출하면 만료일 5를 보관하는 객체 하나가 만들어져요. rule.end_day는 그 객체의 값, rule.permit(3)는 그 객체에 3일의 요청을 맡기는 함수 호출이에요.
  • oop-inheritance-poly: LimitedAccess(AccessRule)는 AccessRule의 구조를 이어받는 하위 클래스예요. 같은 이름의 permit을 다시 정의해 횟수 제한을 추가해요. rules[index].permit(day)는 그 위치에 담긴 실제 객체의 permit을 호출해요.
  • conditionals: 만료 여부와 남은 성공 횟수를 모두 만족한 요청만 허용해요. 성공한 분기에서만 used를 증가시켜요.
  • array-1d: 서로 다른 종류의 객체를 한 리스트에 담아도 같은 이름의 함수를 호출할 수 있어요.

객체를 만들 때 __init__이 실행돼 초기 값을 넣어요. self는 지금 함수를 실행 중인 객체를 가리키는 매개변수예요. self.used와 다른 객체의 used는 별도 값이에요. super().__init__(end_day)는 부모의 초기화를, super().permit(day)는 부모가 정의한 만료 판정을 실행해요. 학생이 클래스 전체를 새로 설계할 필요는 없고 제공된 상태와 호출 순서를 읽으면 돼요.

입력 하네스의 input()은 한 줄의 문자열을 읽고, .split()은 공백으로 항목을 나눠요. map(int, ...)는 각 항목을 정수로 바꾸고 list(...)는 그 결과를 리스트로 모아요. range(n)은 0부터 n-1까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기