티스토리 뷰
SimpleCalc.java - 예제의 원본 출처를 알 수 없습니다. -_-;
큐(queue),스택(stack) 을 이용해서 괄호'(' 까지 있는 산식을 계산해 보자.
queue : 먼저 입력된 값을 먼저 반환
stack : 마지막으로 입력된 값을 먼저 반환
사용
queue : 계산식의 숫자, operator
statck : operator, 계산된 값, 계산할 값
계산식 문자열을 왼쪽에서 부터 읽어서 숫자면 queue에 operator 라면 statck에 담는다.
새로운 operator를 stack에 담을 때, stack에 이미 있는 operator 의 우선순의가 같거나 높으면 stack의 operator를 queue로 옮긴 후 새로운 operator를 stack에 담는다.
- queue엔 모든 숫자, operator가 있고, stack은 비워진 상태임.
- queue에서 하나씩 꺼내 statck에 담고, queue에서 꺼내진 것이 operator라면 stack에서 2개의 수를 꺼내 해당 operator로 계산하고, 결과값을 stack에 담는다.
- queue가 비워졌을 때 stack에 남은 값이 계산식의 결과값임.
로직설명
- 1 + 2
queue | stack | ||
---|---|---|---|
1 | 1 을 queue에 담는다 | 1 | |
2 | + 를 stack에 담는다 | 1 | + |
3 | 2 를 queue에 담는다 | 1 2 | + |
4 | stack에 담긴 + 를 꺼내서 queue에 담는다 | 1 2 + | |
5 |
queue에서 먼저 입력된 것부터 꺼내서 stack에 담는다. 하나씩 꺼내 stack에 담다가 operator가 나오면 stack에 담겨진 두 수를 꺼내 해당 operator로 계산한다. 계산 결과를 stack에 담는다. |
2 + + |
1 1 2 3 |
- 1 + 2 * 3
queue | stack | ||
---|---|---|---|
1 | 1 을 queue에 담는다 | 1 | |
2 | + 를 stack에 담는다 | 1 | + |
3 | 2 를 queue에 담는다. | 1 2 | + |
4 | * 를 stack에 담는다.(+ 는 * 보다 우선순위가 낮다) | 1 2 | + * |
5 | 3 을 queue에 담는다 | 1 2 3 | + * |
6 | stack에 담긴 *,+를 queue에 담는다 | 1 2 3 * + | |
7 |
queue에서 하나씩 꺼내 stack에 담는다. operator를 만나면 stack에서 2개를 꺼내 계산 후 결과값을 stack에 담는다 queue에서 operator "*" 가 나왔기 때문에 stack에서 2, 3를 꺼내 해당 operator로 계산하고, 결과값 6을 stack에 담는다 |
* + + |
1 2 3 1 6 |
8 | queue에서 operator "+" 가 나왔기 때문에 stack에서 1, 6을 꺼내 해당 opreator로 계산하고, 결과값 7을 stack에 담는다 | 7 |
- (1 + 2) * 3
queue | stack | ||
---|---|---|---|
1 | ( 를 stack에 담는다 | ( | |
2 | 1 을 queue에 담는다 | 1 | ( |
3 | + 를 statck에 담는다. "(" 의 경우 ")"를 만날때까지 꺼내지 않음. | 1 | ( + |
4 | 2 를 queue에 담는다 | 1 2 | ( + |
5 | ) 를 만나면 stack에서 "(" 전까지를 queue에 담고, "(" 는 버린다 | 1 2 + | |
6 | * 를 stack에 담는다 | 1 2 + | * |
7 | 3 을 queue에 담는다 | 1 2 + 3 | * |
8 |
stack에 담긴 "*"를 queue에 담는다 | 1 2 + 3 * | |
9 |
queue에서 하나씩 꺼내 stack에 담는다. queue에서 operator가 나왔다면 stack에서 두개를 꺼내 해당 operator로 계산하고, 결과값을 stack에 담는다 |
3 * |
3 9 |
이 글은 스프링노트에서 작성되었습니다.
'Dev' 카테고리의 다른 글
Eclipse - plugin (0) | 2013.07.04 |
---|---|
통합자막 분리용 스크립트 (1) | 2009.07.10 |
FCKeditor (0) | 2008.04.03 |
[펌] oracle dbms utility 관련 구문 (0) | 2008.03.13 |
ibatis-쿼리xml (0) | 2007.12.05 |
- Total
- Today
- Yesterday
- 출근길
- iBATIS
- 무료 프로그램
- 김용
- 일하는 곳
- 금연
- Git
- 윈도우
- 헌혈
- 안드로이드 앱
- VMware
- connect by
- 정부과천청사
- ubuntu
- 법무부
- oracle
- 오라클
- 출근
- GB-P100
- Eclipse
- 낭패
- EditPlus
- 짜증
- 최대 메모리
- 액땜
- 프로젝트
- 바이크
- 충동구매
- Java
- 파워콤해지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |