[백준 1935] 후위 표기식2(C/C++/Python)

강아지 이름은 봄이·2023년 7월 25일

문제 링크 : https://www.acmicpc.net/problem/1935

피연산자의 개수와 후위 표기식, 피연산자의 값을 주어지면 이에 대한 결과를 출력하는 프로그램

문제 해결 과정

피연산자의 값이 알파벳 대문자로 작성되어있고 그에 대한 값들을 입력받기 때문에 배열에 알파벳과 대응되는 숫자를 넣어둔다. 예를 들어 A = 1이고 배열 arr을 선언해두면 arr[0] = 1, B = 10이면 arr[1] = 10, Z = 3이라면 arr[25] = 3 이다.

  • arr[0] : 문자 A의 값을 저장하는 공간
  • arr[25] : 문자 Z의 값을 저장하는 공간

이 때 배열에는 연산 결과가 들어가는데, 나눗셈 연산으로 결과값이 실수가 될 수 있기 때문에 배열을 double형으로 선언해야 한다. (float형으로 선언했다가 값의 범위를 벗어났는지 계속 틀렸다고 나와, double형으로 바꿨더니 통과함)

이외에는 후위표기식을 계산하는 방법에 맞춰 스택을 사용하여 계산 결과를 출력함

코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main(void)
{
	int n; //피연산자 개수
	scanf("%d", &n);
	int numbers[26] = { 0, };
	char command[101];
	double a = 0;
	double b = 0;
	double res = 0;
	scanf("%s", command);

	for (int i = 0; i < n; i++)
	{
		scanf("%d", &numbers[i]);
	}

	double stack[100] = { 0, };
	int pos = 0;
	int idx = 0;

	for (int i = 0; command[i] != NULL ; i++)
	{
		if ('A' <= command[i] && command[i] <= 'Z')
		{
			stack[pos++] = numbers[command[i]-'A'];
		}
		else
		{
			b = stack[--pos];
			a = stack[--pos];
			if (command[i] == '+') res = a + b;
			else if (command[i] == '-') res = a - b;
			else if (command[i] == '*') res = a * b;
			else if (command[i] == '/') res = a / b;
			stack[pos++] = res;
		}
	}
	printf("%.2f", stack[0]);
}

0개의 댓글