๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Computer Science

[์ž๋ฃŒ๊ตฌ์กฐ] ์Šคํƒ - ์ •๋ฆฌ ๋ฐ ์—ฐ์Šต๋ฌธ์ œ

by Leica 2019. 11. 19.
๋ฐ˜์‘ํ˜•
์ด์ „ ํฌ์ŠคํŒ…

1. [์ž๋ฃŒ๊ตฌ์กฐ] ์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ๋ฌด์—‡์ธ๊ฐ€? - ์ •๋ฆฌ ๋ฐ ์—ฐ์Šต๋ฌธ์ œ
https://atoz-develop.tistory.com/entry/entry/์ž๋ฃŒ๊ตฌ์กฐ-์ž๋ฃŒ๊ตฌ์กฐ๋ž€-๋ฌด์—‡์ธ๊ฐ€-์ •๋ฆฌ-๋ฐ-์—ฐ์Šต๋ฌธ์ œ

2. [์ž๋ฃŒ๊ตฌ์กฐ] ๋ฐฐ์—ด - ์ •๋ฆฌ ๋ฐ ์—ฐ์Šต๋ฌธ์ œ
https://atoz-develop.tistory.com/entry/์ž๋ฃŒ๊ตฌ์กฐ-๋ฐฐ์—ด-์ •๋ฆฌ-๋ฐ-์—ฐ์Šต๋ฌธ์ œ

 

1. ์Šคํƒ(Stack)์˜ ๊ฐœ๋…

์Šคํƒ์€ ์ด ๋™์ „ ๋”๋ฏธ์ฒ˜๋Ÿผ ์œ„๋กœ ์Œ“์•„์˜ฌ๋ฆฐ ๋ชจ์Šต์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์Šคํƒ์€ ๊ฐ์ฒด์™€ ๊ทธ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ์ถ”์ƒ ์ž๋ฃŒํ˜•์ด๋‹ค.

- ๊ฐ€์žฅ ๋Šฆ๊ฒŒ ์ž…๋ ฅ๋œ ์ž๋ฃŒ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ถœ๋ ฅ๋˜๋Š” ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

- LIFO(Last In First Out, ํ›„์ž…์„ ์ถœ)

- ํ•˜๋‚˜์˜ ์Šคํƒ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜(์ผ๋ฐ˜์ ์œผ๋กœ top์œผ๋กœ ๋ช…๋ช…)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

- top์€ ์Šคํƒ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์ง€์ ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

- ์‚ฝ์ž… ์‹œ top์„ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ์‚ญ์ œ ์‹œ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

 

2. ์Šคํƒ์˜ ์ถ”์ƒ ์ž๋ฃŒํ˜•(ADT)

* Object(๊ฐ์ฒด)
0๊ฐœ ์ด์ƒ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š” ์œ ํ•œ ์ˆœ์„œ ๋ฆฌ์ŠคํŠธ

* Functions(์—ฐ์‚ฐ)
stack∈Stack, item∈element, maxStackSize∈positive integer์ธ ๋ชจ๋“  stack, item, maxStack์— ๋Œ€ํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ์ •์˜๋œ๋‹ค. stack์€ 0๊ฐœ ์ด์ƒ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š” ์Šคํƒ, item์€ ์Šคํƒ์— ์‚ฝ์ž…๋˜๋Š” ์›์†Œ, maxQueueSize๋Š” ์Šคํƒ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์ •์ˆ˜์ด๋‹ค.

โ‘  Stack CreateStack(maxStackSize) ::=
    ์Šคํƒ์˜ ํฌ๊ธฐ๊ฐ€ maxStackSize์ธ ๋นˆ ์Šคํƒ์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค;

โ‘ก Boolean IsFull(stack) ::=
    if((stack์˜ element ๊ฐœ์ˆ˜) == maxStackSize))
    then { 'TRUE' ๋ฐ˜ํ™˜ }
    else { 'False' ๋ฐ˜ํ™˜ }

โ‘ข Stack Push(stack, item) ::=
    if(isFull(stack))
    then { 'stackFull' ์ถœ๋ ฅ }
    else { ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— item์„ ์‚ฝ์ž…ํ•˜๊ณ  ์Šคํƒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค; }

โ‘ฃ Boolean isEmpty(stack) ::=
    if(stack == CreateStack(maxStackSize))
    then { 'TRUE' ๋ฐ˜ํ™˜ }
    else { 'False' ๋ฐ˜ํ™˜ }

โ‘ค Element Pop(stack) ::=
    if(isEmpty(stack))
    then { 'stackEmpty' ์ถœ๋ ฅ }
    else { ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” element๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค; }

 

3. ์Šคํƒ ์—ฐ์‚ฐ ์ˆ˜ํ–‰

โ‘  CreateStack(3);
โ‘ก Push(stack, 'S');
โ‘ข Push(stack, 'T');
โ‘ฃ Pop(stack);
โ‘ค Push(stack, 'R');
โ‘ฅ Push(stack, 'P');
โ‘ฆ Push(stack, 'Q');
โ‘ง Pop(stack);

 

โ‘ ~โ‘ง ์—ฐ์‚ฐ ๊ฒฐ๊ณผ (์ถœ์ฒ˜: ํ•œ๊ตญ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต)

 

4. ๋ฐฐ์—ด์„ ์ด์šฉํ•œ ์Šคํƒ์˜ ๊ตฌํ˜„

๋‹ค์Œ์€ C์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•œ intํ˜• ์Šคํƒ์ด๋‹ค.

 

4-1. ์Šคํƒ์˜ ์ƒ์„ฑ

1
2
3
4
#define STACK_SIZE 5
typedef int element;
element stack(STACK_SIZE);
int top = -1;
cs

1๋ผ์ธ: ์Šคํƒ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ •์˜ํ•œ๋‹ค.

2๋ผ์ธ: intํ˜•์„ ์Šคํƒ element์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ์ •์˜ํ•œ๋‹ค.

3๋ผ์ธ: ์Šคํƒ์„ ์ƒ์„ฑํ•œ๋‹ค.

4๋ผ์ธ: ์Šคํƒ์˜ top์„ -1๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๊ณต๋ฐฑ ์ƒํƒœ๋กœ ํ•œ๋‹ค.

 

์Šคํƒ ์ƒ์„ฑ ๊ฒฐ๊ณผ

 

4-2. ์Šคํƒ์˜ ์‚ญ์ œ(pop)

1
2
3
4
5
6
7
8
element pop(int *top) {
    if(*top == -1) {
        printf("Stack is Empty\n");
        return 0;
    }
    else return stack[*top--];
}
 
cs

2~4๋ผ์ธ: ์Šคํƒ ๊ณต๋ฐฑ ์—ฌ๋ถ€ ํ™•์ธ ๋ฐ ์ฒ˜๋ฆฌ

6๋ผ์ธ: *top์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์˜ ๊ฐ’์„ returnํ•˜๊ณ  *top์„ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค. (์ˆœ์„œ ์ค‘์š”)

 

์Šคํƒ ์‚ญ์ œ(pop) ๊ฒฐ๊ณผ

 

4-3. ์Šคํƒ์˜ ์‚ฝ์ž…(push)

1
2
3
4
5
6
7
8
void push(int *top, element item) {
    if(*top >= STACK_SIZE -1) {
        printf("Stack is Full\n");
        return;
    }
    else stack[++*top] = item;
}
 
cs

2~4๋ผ์ธ: ์Šคํƒ full ํ™•์ธ ๋ฐ ์ฒ˜๋ฆฌ

6๋ผ์ธ: top์˜ ์ฃผ์†Œ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ  top์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ์— item์„ ์ €์žฅํ•œ๋‹ค. (์ˆœ์„œ ์ค‘์š”)

 

 

์Šคํƒ ์‚ฝ์ž…(push) ๊ฒฐ๊ณผ

5. ์Šคํƒ์˜ ์‘์šฉ ๋ถ„์•ผ

- ์Šคํƒ์€ ์™”๋˜ ๊ธธ์„ ๋˜๋Œ์•„ ๊ฐ€๋Š” ๊ฒฝ์šฐ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

- ์‹œ์Šคํ…œ ์Šคํƒ(system stack) : ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ์ˆ˜์ง‘. ์ฆ‰ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ

- ์„œ๋ธŒ๋ฃจํ‹ด ํ˜ธ์ถœ(subroutine call) ๊ด€๋ฆฌ : ์„œ๋ธŒ๋ฃจํ‹ด์˜ ์ˆ˜ํ–‰์ด ๋๋‚œ ํ›„์— ๋˜๋Œ์•„๊ฐˆ ํ•จ์ˆ˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅ

- ์ˆ˜์‹ ๊ณ„์‚ฐ : ์—ฐ์‚ฐ์ž๋“ค ๊ฐ„์˜ ์šฐ์„ ์ˆœ์œ„ ๊ฒฐ์ •

- ์ธํ„ฐ๋ŸฝํŠธ(interrupt) : ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰ ์ค‘ ๋ฐœ์ƒ๋˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ์˜ ์ฒ˜๋ฆฌ์™€ ๋˜๋Œ์•„๊ฐˆ ๋ช…๋ น ์ˆ˜ํ–‰ ์ง€์  ์ €์žฅ

- ์ปดํŒŒ์ผ๋Ÿฌ : ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ

- ์ˆœํ™˜ ํ˜ธ์ถœ(recursion call) ๊ด€๋ฆฌ : ์ˆœํ™˜ ํ˜ธ์ถœ์ด ๋๋‚˜๊ณ  ๋˜๋Œ์•„๊ฐˆ ์‹คํ–‰ ์ฃผ์†Œ ์ €์žฅ

 

 

6. ์ˆ˜์‹์˜ ์ „์œ„/ํ›„์œ„/์ค‘์œ„ ํ‘œํ˜„

  ์—ฐ์‚ฐ์ž๋“ค ๊ฐ„์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ์ˆ˜์‹์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ์Šคํƒ์ด ์‚ฌ์šฉ๋œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ˆ˜์‹์„ ์ž…๋ ฅ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์‹์˜ ํ‘œ๊ธฐ ๋ฐฉ๋ฒ•์€ ์—ฐ์‚ฐ์ž์™€ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๋‹ค์Œ์˜ ์„ธ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

  • ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•(infix notation): ์—ฐ์‚ฐ์ž๋ฅผ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์‚ฌ์ด์— ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ๋ฒ•; A+B
  • ์ „์œ„ ํ‘œ๊ธฐ๋ฒ•(prefix notation, polish notation): ์—ฐ์‚ฐ์ž๋ฅผ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์•ž์— ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ๋ฒ•; +AB
  • ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•(postfix notation): ์—ฐ์‚ฐ์ž๋ฅผ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋’ค์— ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ๋ฒ•; AB+

ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์ด ์ปดํ“จํ„ฐ๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ์— ํšจ์œจ์ ์ธ ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค.

 

  ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์„ ์ „์œ„, ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์Šคํƒ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋‹ค์Œ์—์„œ ์ „์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ์˜ ๋ณ€ํ™˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํŠธ๋ฆฌ๋ฅผ, ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ์˜ ๋ณ€ํ™˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์Šคํƒ๊ณผ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃฐ๊ฒƒ์ด๋‹ค.

 

๋ณ€ํ™˜ํ•  ์‹ : A/B+C

 

6-1. ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ• -> ์ „์œ„ ํ‘œ๊ธฐ๋ฒ• ๋ณ€ํ™˜

โ‘  ์ฃผ์–ด์ง„ ์‹์„ ํŠธ๋ฆฌ๋กœ ๊ทธ๋ฆฐ๋‹ค.

 

A/B+C๋ฅผ ํŠธ๋ฆฌ๋กœ ํ‘œํ˜„

  ๋ฆฌํ”„ ๋…ธ๋“œ์— ํ”ผ์—ฐ์‚ฐ์ž A, B, C๋ฅผ, ๋ถ€๋ชจ ๋…ธ๋“œ์—๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋กœ ์œ„์น˜ํ•˜๋„๋ก ๊ทธ๋ฆฐ๋‹ค. ์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

โ‘ก ํŠธ๋ฆฌ๋ฅผ ์ „์œ„(preorder) ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

ํŠธ๋ฆฌ์˜ ์ „์œ„ ์ˆœํšŒ

   ์ „์œ„ ์ˆœํšŒ๋Š” ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด root → left → right ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์œ„ ํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•˜๋ฉด ์ถœ๋ ฅ ์ˆœ์„œ๋Š” +/ABC๊ฐ€ ๋˜๋ฉฐ ์ด๊ฒƒ์ด ์ฃผ์–ด์ง„ ์‹ A/B+C์˜ ์ „์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œํ˜„๋œ ๊ฒฐ๊ณผ์ด๋‹ค.

 

[์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•] A/B+C → [์ „์œ„ ํ‘œ๊ธฐ๋ฒ•] +/ABC

 

6-2. ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ• -> ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ๋ณ€ํ™˜

6-2-1. ํŠธ๋ฆฌ ์ด์šฉ

โ‘  ์ฃผ์–ด์ง„ ์‹์„ ํŠธ๋ฆฌ๋กœ ๊ทธ๋ฆฐ๋‹ค.

 

A/B+C๋ฅผ ํŠธ๋ฆฌ๋กœ ํ‘œํ˜„

  ๋™์ผํ•˜๊ฒŒ ํŠธ๋ฆฌ๋ฅผ ๊ทธ๋ฆฐ๋‹ค.

 

โ‘ก ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„(postorder) ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

ํŠธ๋ฆฌ์˜ ํ›„์œ„ ์ˆœํšŒ

  ํ›„์œ„ ์ˆœํšŒ๋Š” ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด left → right → root ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์œ„ ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•˜๋ฉด ์ถœ๋ ฅ ์ˆœ์„œ๋Š” AB/C+๊ฐ€ ๋˜๋ฉฐ ์ด๊ฒƒ์ด ์ฃผ์–ด์ง„ ์‹ A/B+C์˜ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œํ˜„๋œ ๊ฒฐ๊ณผ์ด๋‹ค.

 

[์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•] A/B+C → [์ „์œ„ ํ‘œ๊ธฐ๋ฒ•] AB/C+

 

6-2-2. ์Šคํƒ ์ด์šฉ

โ‘  ์ฃผ์–ด์ง„ ์‹์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ฝ๋Š”๋‹ค.
โ‘ก ํ”ผ์—ฐ์‚ฐ์ž๋Š” ์Šคํƒ์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.
โ‘ข ์—ฐ์‚ฐ์ž๋Š” ์Šคํƒ์— ์ €์žฅํ•˜๋‚˜, ๋‹ค์Œ์˜ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.
   
- ์ƒˆ๋กœ ์ž…๋ ฅํ•  ์—ฐ์‚ฐ์ž(A)์™€ ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์—ฐ์‚ฐ์ž(B)์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋น„๊ตํ•œ๋‹ค.
   
- B๊ฐ€ A์˜ ์šฐ์„ ์ˆœ์œ„๋ณด๋‹ค ๋†’๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด B๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.
   
- A๊ฐ€ B๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒฝ์šฐ์—๋งŒ ๋ฐ”๋กœ ์Šคํƒ์— ์ €์žฅํ•œ๋‹ค.

 

๋‹ค์Œ์€ ์ฃผ์–ด์ง„ ์ค‘์œ„ ํ‘œ๊ธฐ์‹ A/B+C๋ฅผ ์Šคํƒ์„ ์ด์šฉํ•ด ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

โ‘  ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฝ์–ด ์ฒซ ๋ฒˆ์งธ ์ž…๋ ฅ๊ฐ’(ํ† ํฐ)์€ 'A'์ด๋‹ค. ํ”ผ์—ฐ์‚ฐ์ž๋Š” ์Šคํƒ์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

โ‘ก ์—ฐ์‚ฐ์ž '/'๋Š” ์Šคํƒ์— ์ €์žฅํ•œ๋‹ค. ์Šคํƒ์ด ๋น„์—ˆ์œผ๋ฏ€๋กœ ๋น„๊ตํ•  ์—ฐ์‚ฐ์ž๊ฐ€ ์—†๋‹ค.

โ‘ข ํ”ผ์—ฐ์‚ฐ์ž 'B'๋Š” ์Šคํƒ์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

โ‘ฃ ์—ฐ์‚ฐ์ž '+'๋Š” ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์ €์žฅ๋œ ์—ฐ์‚ฐ์ž '/'๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์œผ๋ฏ€๋กœ '/'๋ฅผ ์‚ญ์ œ, ์ถœ๋ ฅํ•˜๊ณ  '+'๋ฅผ ์ €์žฅํ•œ๋‹ค.

โ‘ค ์—ฐ์‚ฐ์ž 'C'๋Š” ์Šคํƒ์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

โ‘ฅ ๋” ์ด์ƒ ์ž…๋ ฅ๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ ์Šคํƒ์„ ์ฐจ๋ก€๋กœ ์‚ญ์ œ, ์ถœ๋ ฅํ•œ๋‹ค.

 

6-3. ํ›„์œ„ ํ‘œ๊ธฐ์‹์˜ ๊ณ„์‚ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„(C)

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
element evalPostfix(char *exp) {
    int oper1, oper2, value, i=0;
    int length = strlen(exp);
    char symbol;
    top = -1;
 
    for(i=0; i<length; i++) {
        symbol = exp[i];
        if(symbol != '+' && symbol != '-' && symbol != '*' && symbol != '/') {
            value = symbol - '0';
            push(value);
        }
        else {
            oper2 = pop();
            oper1 = pop();
            switch(symbol) {
                case '+': push(oper1 + oper2); break;
                case '-': push(oper1 - oper2); break;
                case '*': push(oper1 * oper2); break;
                case '/': push(oper1 / oper2); break;
            }
        }
    }
    
    return pop();
}
 
cs

1๋ผ์ธ: element evalPostfix(char *exp)

์Šคํƒ์„ ์‚ฌ์šฉํ•ด ํ›„์œ„ ํ‘œ๊ธฐ์‹์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ evalPostfix๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค. ์•ž์˜ ์Šคํƒ์˜ ์ƒ์„ฑ์—์„œ typedef int element;๋กœ ์ •์˜ํ•œ ์Šคํƒ element ์ž๋ฃŒํ˜•์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. charํ˜• ํฌ์ธํ„ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ˆ˜์‹์ด ์ €์žฅ๋œ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” exp๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค. ๊ณ„์‚ฐํ•  ํ›„๊ธฐ ํ‘œ๊ธฐ์‹์€ 369*+๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

 

์ˆ˜์‹์ด ์ €์žฅ๋œ ๋ฐฐ์—ด์˜ ๋ชจ์Šต

 

2๋ผ์ธ: int oper1, oper2, value, i=0;

oper1, oper2 : ํ”ผ์—ฐ์‚ฐ์ž

value : ํ›„์œ„ ํ‘œ๊ธฐ์‹์—์„œ charํ˜•์œผ๋กœ ์ €์žฅ๋œ ์ˆซ์ž๋ฅผ intํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅ

i : for๋ฌธ

 

3๋ผ์ธ: int length = strlen(exp);

charํ˜• ํฌ์ธํ„ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ํ›„์œ„ํ‘œ๊ธฐ์‹ ๋ฐฐ์—ด์˜ ๊ธธ์ด ์ €์žฅํ•œ๋‹ค. ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ํ˜„์žฌ ์‹์ด '369*-'์ด๋ฏ€๋กœ length์— 5๊ฐ€ ์ €์žฅ๋œ๋‹ค.

 

4๋ผ์ธ: char symbol;

๋ฐฐ์—ด์„ ํ•˜๋‚˜์”ฉ ์ฝ์–ด ์ €์žฅํ•  ๋ณ€์ˆ˜

 

5๋ผ์ธ: top = -1;

top ์ดˆ๊ธฐํ™”

 

8๋ผ์ธ: symbol = exp[i];

 

9๋ผ์ธ: if(symbol != '+' && symbol != '-' && symbol != '*' && symbol != '/')

symbol์ด ์—ฐ์‚ฐ์ž์ธ์ง€ ํ™•์ธ

 

10๋ผ์ธ: value = symbol - '0';

์—ฐ์‚ฐ์ž์ด๋ฉด char๋ฅผ int๋กœ ํ˜•๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด '0'์„ ๋บ€ ๊ฐ’์„ ์ €์žฅ

 

11๋ผ์ธ: push(value);

์—ฐ์‚ฐ์ž์ด๋ฉด ์Šคํƒ์— ์ €์žฅ

 

i=2๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์ด ์‹คํ–‰๋์„ ๋•Œ ๋ฐฐ์—ด๊ณผ ์Šคํƒ

 

14~15๋ผ์ธ: oper2 = pop(); oper1 = pop();

symbol์ด ์—ฐ์‚ฐ์ž์ด๋ฉด ์Šคํƒ์— ์ €์žฅ๋ผ์žˆ๋Š” ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๊บผ๋‚ด์„œ ์ €์žฅ

 

16~20๋ผ์ธ: switch(symbol)...

symbol์ด ์—ฐ์‚ฐ์ž์ด๋ฉด ํ•ด๋‹นํ•˜๋Š” ์—ฐ์‚ฐ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์Šคํƒ์— ์ €์žฅ

 

i=3๊นŒ์ง€ ์‹คํ–‰๋์„ ๋•Œ ๋ฐฐ์—ด๊ณผ ์Šคํƒ

 

7๋ผ์ธ: for(i=0; i<length; i++)

25๋ผ์ธ: return pop();

i=5์ผ๋•Œ ๋ฐฐ์—ด๊ณผ ์Šคํƒ. ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋œ๋‹ค.

i๊ฐ€ 5๊ฐ€ ๋˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ  ์Šคํƒ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ popํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํ›„์œ„ ํ‘œ๊ธฐ์‹ ๊ณ„์‚ฐ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

ํ›„์œ„ ํ‘œ๊ธฐ์‹ 369*+์˜ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋Š” 57์ด๋‹ค.

 

7. ์—ฐ์Šต๋ฌธ์ œ

1. A*B+C๋ฅผ ํ›„์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์€?
โ‘  AB*C+
โ‘ก ABC*+
โ‘ข AC*B+
โ‘ฃ AC+B*

2. ์Šคํƒ์˜ ์‘์šฉ๋ถ„์•ผ๊ฐ€ ์•„๋‹Œ๊ฒƒ์€?
โ‘  ์‹œ์Šคํ…œ ์Šคํƒ
โ‘ก ์„œ๋ธŒ๋ฃจํ‹ด ํ˜ธ์ถœ
โ‘ข ์ž‘์—… ์Šค์ผ€์ค„๋ง
โ‘ฃ ์ˆ˜์‹์˜ ๊ณ„์‚ฐ

3. ๋‹ค์Œ ๋ฌธ์žฅ์˜ ์˜ณ๊ณ  ๊ทธ๋ฆ„์„ ๊ฒฐ์ •ํ•˜์‹œ์˜ค. (O, X)
์Šคํƒ์˜ ์ถ”์ƒ ์ž๋ฃŒํ˜•์—์„œ ์ •์˜๋œ ์—ฐ์‚ฐ์€ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ •์˜๋˜๊ณ  ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์„ค๊ณ„์ž์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋‹ค๋ฅด๊ฒŒ ์ œ๊ณต๋  ์ˆ˜ ์žˆ๋‹ค.

4. ๋‹ค์Œ ์ค‘ ์Šคํƒ์˜ ์‘์šฉ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์•„๋‹Œ๊ฒƒ์€?
โ‘  ์ค‘์•™์ฒ˜๋ฆฌ ์žฅ์น˜ ํ• ๋‹น์„ ์œ„ํ•œ RR ๊ธฐ๋ฒ•
โ‘ก ์„œ๋ธŒ๋ฃจํ‹ด์˜ ์ˆ˜ํ–‰์ด ๋๋‚œ ํ›„์— ๋˜๋Œ์•„๊ฐˆ ํ•จ์ˆ˜ ์ฃผ์†Œ ์ €์žฅ
โ‘ข ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋“ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ
โ‘ฃ ์—ฐ์‚ฐ์ž๋“ค ๊ฐ„์˜ ์šฐ์„ ์ˆœ์œ„์— ์˜ํ•ด ๊ณ„์‚ฐ ์ˆœ์„œ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ์ˆ˜์‹ ๊ณ„์‚ฐ

5. ๋‹ค์Œ์€ ์Šคํƒ์˜ ์—ฐ์‚ฐ๋“ค์ด๋‹ค. โ‘ฃ๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

6. ๋‹ค์Œ ์„ค๋ช… ์ค‘ ๊ฐ€์žฅ ํ‹€๋ฆฐ ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?
โ‘  ์Šคํƒ์€ ์ž๋ฃŒ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ œ์–ด๋œ๋‹ค.
โ‘ก ์Šคํƒ์€ ๊ฐ์ฒด์™€ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ์ถ”์ƒ์ž๋ฃŒํ˜•์ด๋‹ค.
โ‘ข ์Šคํƒ์˜ ํฌ๊ธฐ๋Š” ๊ฐ€๋ณ€์ ์ด๋‹ค.
โ‘ฃ ํ›„์œ„ ํ‘œ๊ธฐ์‹์€ ์—ฐ์‚ฐ์ž๋ฅผ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋’ค์— ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

7. ๋‹ค์Œ์€ ์Šคํƒ์˜ ์—ฐ์‚ฐ๋“ค์ด๋‹ค. โ‘ฅ์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

8. A+B+C*D๋ฅผ ์ „์œ„ ํ‘œ๊ธฐ์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์€?
โ‘  ++AB*CD
โ‘ก ABCD++*
โ‘ข ++*ABCD
โ‘ฃ AB+B+C*

9. ๋‹ค์Œ์€ ์Šคํƒ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ด๋‹ค. โ‘ง ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ํ›„์˜ ์Šคํƒ์˜ ๋ชจ์Šต์€ ๋ฌด์—‡์ธ๊ฐ€?

10. ๋‹ค์Œ์€ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ์Šคํƒ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณผ์ •์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ”๋“œ์ด๋‹ค. [๊ฐ€]์— ๋“ค์–ด๊ฐˆ ์ฝ”๋“œ๋กœ ๊ฐ€์žฅ ์•Œ๋งž์€ ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€?

 

์ •๋‹ต โ–ผ

๋”๋ณด๊ธฐ

1 : โ‘ 
2 : โ‘ข
3 : O
4 : โ‘ 
5 : โ‘ก
6 : โ‘ข
7 : โ‘ฃ
8 : โ‘ 
9 : โ‘ 
10 : โ‘ก

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€