백준 1935번
https://www.acmicpc.net/problem/1935
착안점
- double형 스택을 구조체로 선언
+
,-
,*
,/
인 경우를 제외하면 피연산자이므로 int형 배열에 있는 원소를 push
테크닉
- push(ch-'A')
- 입력 예제를 보면,
ABCDE
와 같은 피연산자는숫자
로 변환한 뒤, push해줘야 한다. 피연산자는 항상 A, B, 부터 입력되므로 array 배열에 있는 원소들을 차곡차곡 push하기 위해서는 ch-'A'만큼 빼주어야 한다. - 맨 처음에 입력하는 num이 곧 array 배열의 길이기 때문에
AA+A+
입력된다 할지라도 상관이 없다.
- 입력 예제를 보면,
실수했던 점
- calculate 함수의 parameter를 double로 선언하지 않았던 점.
- 함수(pop, peek)의 return값을 double로 해주지 않았다.
코드
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_SIZE 100 typedef struct Stack{ int top; double s[MAX_SIZE]; }Stack; void push(Stack *s, double elem){ s->top++; s->s[s->top] = elem; } double pop(Stack *s){ double temp = s->s[s->top]; s->top--; return temp; } double peek(Stack *s){ return s->s[s->top]; } void calculate(Stack *s, char op, double x, double y){ switch(op){ case '+': push(s, x+y); break; case '-': push(s, x-y); break; case '*': push(s, x*y); break; case '/': push(s, x/y); break; } } int main(void){ Stack s; s.top = -1; char str[100]; int i=0; int num; double input; scanf("%d", &num); double array[num]; scanf("%s", str); for(i=0; i<num; i++){ scanf("%lf", &input); } for(i=0; i<strlen(str); i++){ char ch = str[i]; switch(ch){ case '+': case '-': case '*': case '/': calculate(&s, ch, pop(&s), pop(&s)); break; default: push(&s, array[ch-('A')]); break; } } printf("%.2lf", peek(&s)); printf("\n"); }
추가 설명
≡'프로그래밍 > 코드분석' 카테고리의 다른 글
[백준1918번] (C) 후위표기식 (0) | 2018.05.15 |
---|---|
[파이썬](level4)공항 건설하기 (0) | 2017.11.19 |
[파이썬] (level4) 최고의 집합 (0) | 2017.11.05 |
[파이썬] (level4) 땅따먹기 게임 (1) | 2017.10.28 |
[파이썬] (level4) 숫자의 표현 (0) | 2017.10.24 |