문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

7048 : 카운터 생성기 (Closure)

•시간제한: 1.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

7048 : 카운터 생성기 (Closure)

시간 1.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

독립된 카운터 상태를 유지하는 함수를 생성하는 클로저(Closure)를 구현해 봅시다.
호출될 때마다 내부 변수 값을 변경하여 현재 카운트 값을 관리하고 반환하는 중첩 함수(Nested Function) 구조를 사용합니다.

[명령어 설명]
- CREATE id: 이름이 id인 독립적인 카운터를 새로 생성하며, 초기 카운터 값은 0입니다.
- INC id: 이름이 id인 카운터의 값을 1 증가시킵니다.
- RESET id: 이름이 id인 카운터의 값을 0으로 초기화합니다.
- GET id: 이름이 id인 카운터의 현재 값을 출력합니다.

[제약 조건]
• 명령 수 $N$: $1 \le N \le 1{,}000$
• 카운터 이름: 알파벳 소문자 1글자

입력 설명

첫째 줄에 명령어의 개수 N이 주어집니다. (1 ≤ N ≤ 1,000)
둘째 줄부터 N개의 줄에 걸쳐 각 줄에 하나의 명령어가 주어집니다. 카운터의 이름 id는 알파벳 소문자 1글자입니다.

출력 설명

GET 명령어가 주어질 때마다 해당 카운터의 현재 값을 줄을 나누어 출력합니다.

입력 예시
COPY
복사되었습니다!

7
CREATE a
GET a
INC a
INC a
GET a
RESET a
GET a

출력 예시
COPY
복사되었습니다!

0
2
0

도움

중첩 함수 내부에서 상위 함수의 지역 변수를 수정하려면 nonlocal 키워드를 사용해야 합니다.
def make_counter():
    count = 0
    def counter(op):
        nonlocal count
        if op == "INC": count += 1
        elif op == "RESET": count = 0
        return count
    return counter
위와 같이 클로저 함수를 생성하고, 각 카운터 id별로 함수 인스턴스를 저장하여 활용하십시오.

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘