자료구조 공부하신적이 있다면 계산기를 보통 스택으로 구현 하는걸 알수 있는데요
데브피아 김영찬님이 쓰신글이 쉽게 이해가 되실것 같내요
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=741188&ref=741187
우리가 일반적으로 알고 있는 산술식은 중위 표기식입니다.
즉, 숫자들 사이에 연산 기호가 들어가죠;;
그리고 사람은 연산기호를 보고 어느게 우선순위가 높고 낮은지 판단을 하고 거기부터 계산합니다.
하지만 컴퓨터는 멍텅구리입니다. 0, 1밖에 모르는 전자제품입니다.
(물론 이런 전자제품에 생명력을 불어 넣어주는거는 프로그래머들의 몫이지만...)
즉, 컴퓨터는 산술식이 들어오면 어디서부터 계산해야하는지 모릅니다.
그래서 일반적으로 후위표기식을 많이 사용합니다.(전위 표기식을 사용하는 경우도 있습니다)
간단히 예를 들면
3 + 4 * 5 / 10 - 2
3 4 5 * 10 / + 2 - 처럼 됩니다.
자 이를 계산해 봅시다..
연산자가 나올때까지 스택에 고히 쑤셔 넣습니다.
3 | 4 | 5 |
5까지 넣고 나니 곱셈 연산자가 나왔습니다
스택에서 두개 꺼냅니다.
4 5 꺼내고 곱셈합니다.
결과값을 다시 스택에 넣어요~
3 | 20 | 이렇게 있겠죠.. 마찬가지로 계속 진행합니다.
3 | 20 | 10 |
나누기 연산자입니다.
스택에서 두개 꺼내고 연산하고 다시 넣습니다.
3 | 2 | 가 스택에 들어있습니다.
다음에 더하기 연산자가 오군요
스택에서 꺼내고 계산..
5 | 가 됩니다
계속 진행
5 | 2 |
빼기군요
3 |
스택에는 3이 남고
더이상 숫자나 연산자가 남아 있지 않군요
답은 3이 됩니다.
예에서 보셨듯이
후위 표기식은 숫자를 차례대로 넣다가 연산자를 만나면 제일 마지막에 넣은 두개의 숫자를 꺼내서
연산을 하고 다시 집어 넣는 방식입니다.
차례대로 넣다가 제일 마지막에 넣은걸 꺼내는 방식은 LIFO 방식인 스택의 구조에 가깝기 때문입니다.
그래서 스택을 많이 사용합니다
요시 님이 쓰신 글 :
: 계산기 프로그램을 만들어봤는데요
:
: 2+3 이런식으로 한번 연산하는부분은 계산이 되는데요
:
: 2+3+4 처럼 연산 횟수가 늘어날때
:
: 프로그램을 어떻게 만들어야될지 밤새 고민해도 모르겠어서 질문드려봐요
:
: 답글도 감사하지만 제가 완전 초보라 좀 쉽게 설명해주신다면 더 감사하겠습니다~
|