프로그래밍 언어 Z

면접 대비

시간 제한2초메모리 제한128 MB

요약
변수 대입, 중첩 REPEAT 반복문, PRINT 명령으로 이루어진 간단한 언어를 파싱하여 10000으로 나눈 나머지 연산으로 시뮬레이션합니다.
난이도

보통10점 중 4점

유형
시뮬레이션, 구현, 문자열
정답자
아직 제출이 없습니다

문제

프로그래밍 언어 Z에서는 변수 26개를 사용할 수 있다. 변수 이름은 알파벳 소문자 a부터 z까지이며, 모든 변수의 초기값은 0이다.

프로그램을 실행하는 동안 각 변수에는 0 이상 9999 이하의 정수만 저장된다. 어떤 계산 결과를 변수에 저장하려 할 때 이 범위를 벗어나면, 그 값을 10000으로 나눈 나머지를 저장한다.

프로그램의 각 줄에는 명령어가 하나만 있으며, 명령어는 다음 다섯 가지 중 하나이다.

명령어의미
BEGIN프로그램의 첫 줄에만 나온다.
var = expr왼쪽 변수 var에 오른쪽 식 expr의 값을 저장한다. 식은 하나 이상의 항을 + 또는 -로 연결한 형태이다. 각 항은 상수 또는 변수이며, 변수 앞에 상수가 붙으면 그 변수에 상수를 곱한다. 예를 들어 a = 2b + 4 - c는 2 * b + 4 - c를 a에 저장한다. 모든 연산자 앞뒤에는 공백이 있다. 상수는 0 이상 999 이하의 정수이다.
REPEAT n이어지는 블록을 시작하며, 그 블록을 n번 반복한다. (1 <= n <= 100000)
STOP현재 블록의 끝을 나타낸다.
PRINT var변수 var의 현재 값을 var = value 형식으로 출력한다.

프로그래밍 언어 Z로 작성된 프로그램이 주어졌을 때, 실행 중 화면에 출력되는 내용을 구하라.

입력

입력으로 프로그래밍 언어 Z 프로그램이 주어진다. 프로그램은 최대 50줄이고, 각 줄에는 명령어가 하나씩 있다. 한 줄의 길이는 100자를 넘지 않는다. BEGIN...STOP과 REPEAT...STOP 블록은 깊이가 한 단계 늘어날 때마다 공백 3칸으로 들여쓴다. PRINT 명령은 실행 중 최대 20번 수행된다.

출력

프로그램을 실행하면서 PRINT 명령을 만날 때마다 그 결과를 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    BEGIN
       n = 10
       k = 1
       REPEAT 3
          REPEAT 2
             n = n + k
             PRINT n
          STOP
          k = 3 - k
       STOP
    STOP
    
    예상 출력
    n = 11
    n = 12
    n = 14
    n = 16
    n = 17
    n = 18
    
  2. 예제 2

    입력
    BEGIN
       a = 1
       b = a
       PRINT a
       PRINT b
       REPEAT 10
          c = a + b
          a = b
          b = c
          PRINT c
       STOP
    STOP
    
    예상 출력
    a = 1
    b = 1
    c = 2
    c = 3
    c = 5
    c = 8
    c = 13
    c = 21
    c = 34
    c = 55
    c = 89
    c = 144
    
  3. 예제 3

    입력
    BEGIN
       x = 1
       REPEAT 4
          REPEAT 99999
             x = 2x
          STOP
          PRINT x
       STOP
    STOP
    
    예상 출력
    x = 4688
    x = 7344
    x = 8672
    x = 4336