회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
추가된 문제
문제 순위
문제
푼 사람이 한 명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
2
채점 현황
랭킹
게시판
그룹
더 보기
재채점 기록
블로그
강의
실험실
도움말
BOJ Stack
BOJ Book
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
solved.ac
글쓰기
질문 도움말
자주묻는 질문
1918번 후위표기식 질문입니다! 헬프미~
1918번 - 후위 표기식
xotmd17
5년 전
0
소스코드의 설명은 주석으로 달아놓았습니다.
j는 스택의 위치를 가리키는 index입니다.
#include<iostream> using namespace std; char CAL[101]; char POSTFIX[101]; int main(void) { int j=0; //STACK(POSTFIX)를 가리키는 index cin >> CAL; for(int i=0; CAL[i]!='\0'; i++) //NULL 전까지 반복한다. { if(CAL[i] >= 65 && CAL[i] <= 90) //대문자 알파벳일때, 그냥 출력한다. cout << CAL[i]; else if(CAL[i] == ')') //닫는 괄호라면, 여는 괄호가 나오기 전까지 연산자를 출력한다. { while(POSTFIX[--j] != '(') cout << POSTFIX[j]; } else if(((CAL[i] == '*' || CAL[i] == '/') && (POSTFIX[j-1] == '+' || POSTFIX[j-1] == '-')) || CAL[i] == '(') //현재 연산자가 (* or /) 이고, 스택에 top에 저장된 연산자가 (+ or -)이거나 여는 괄호라면 실행 { POSTFIX[j++] = CAL[i]; //스택에 넣어준다. 연산자 순위가 (+,- < *,/) 이므로 유일하게 그냥 넣을 수 있는 상태이다. } else //연산자 일때(그냥 넣을수 있는 조건은 지나왔기 때문에 이 조건에서는 스택의 내용을 전부 뽑아낸후, 현재 연산자를 스택에 넣어준다. { if(j>0) //스택이 비어있지 않다면 실행 { while(j) { j--; if(POSTFIX[j] == '(') //여는 괄호가 있다면, 그만 뽑아낸다. { POSTFIX[++j] = CAL[i]; //스택에 넣어준다. j++; //스택을 바라보는 위치를 조정한다. break; } cout << POSTFIX[j]; //뽑아낸다. } if(j==0) //전부 뽑아냈다면 연산자를 스택에 넣어준다. POSTFIX[j++] = CAL[i]; } else //스택이 비어있다면 실행 POSTFIX[j++] = CAL[i]; //스택에 넣어준다. } } while(j) //연산자가 스택에 남아있다면 전부 뽑아낸다. cout << POSTFIX[--j]; }
seico75
5년 전
1
D-A/B*C
댓글을 작성하려면
로그인
해야 합니다.
xotmd17 5년 전
소스코드의 설명은 주석으로 달아놓았습니다.
j는 스택의 위치를 가리키는 index입니다.