모두CBT

다음은 후위 표기식을 스택을 이용하여 사칙연산을 하는 알고리즘을 구현한… | [7급 국가직 자료구조론] 26년 1회차 기출문제 상세 페이지

1[7급 국가직 자료구조론] 26년 1회차
다음은 후위 표기식을 스택을 이용하여 사칙연산을 하는 알고리즘을 구현한 C 프로그램이다. 출력 결과가 12인 프로그램의 실행에 대한 설명으로 옳은 것만을 모두 고르면?
#include <stdio.h>
#include <stdlib.h>

#define MAX_STACK_SIZE 50

typedef int Item;
Item stack[MAX_STACK_SIZE];
int top;

void reset_stack() { top = -1; }

void push(Item elm) { stack[++top] = elm; }

Item pop() { return stack[top--]; }

Item calc_exp(char *exp) {
int x, y, z, current, i = 0;
reset_stack();
while(exp[i] != '$') {
current = exp[i++];
if(current >= '0' && current <= '9')
push([ (가) ]);
else if(current == '+' || current == '-' ||
current == '*' || current == '/') {
[ (나) ] = pop();
[ (다) ] = pop();
switch(current) {
case '+': z = x + y; break;
case '-': z = x - y; break;
case '*': z = x * y; break;
case '/': z = x / y;
}
push(z);
}
}
return pop();
}

int main() {
char exp[20] = "2 3 4 + * 6 3 / - $";
printf("%d\n", calc_exp(exp));
return 0;
}
ㄱ. (가)에 들어갈 내용은 current이다.
ㄴ. (나)에 들어갈 내용은 y이고 (다)에 들어갈 내용은 x이다.
ㄷ. 프로그램을 실행하는 동안 pop 함수의 총호출 횟수는 8회이다.
ㄹ. 프로그램을 실행하는 동안 push 함수의 총호출 횟수는 9회이다.
1
ㄱ, ㄴ
2
ㄱ, ㄷ
3
ㄴ, ㄹ
4
ㄱ, ㄴ, ㄹ
해설

옳은 것은 ㄴ, ㄹ이다.

2 3 4 + * 6 3 / − 는 2×(3+4)−6/3=14−2=122\times(3+4) - 6/3 = 14 - 2 = 12이다. 숫자 5개를 push하고, 연산자 4개마다 pop 2회·push 1회를 하며, 마지막에 결과를 pop 1회 한다.

  • ㄱ: current는 문자 코드이므로 숫자 값으로 바꾸려면 current - '0'을 push해야 한다(틀림).
  • ㄴ: 먼저 꺼낸 값이 오른쪽 피연산자이므로 y를 먼저, x를 나중에 꺼내야 x − y, x / y가 맞다(옳음).
  • ㄷ: pop은 연산자 4개 × 2회 + 최종 1회 = 9회이므로 8회가 아니다(틀림).
  • ㄹ: push는 숫자 5회 + 연산 결과 4회 = 9회다(옳음).

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[7급 국가직 자료구조론] 26년 1회차 25문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요7급 국가직 자료구조론 기출문제 암기장 전체 보기