๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“–CS/๐Ÿ“™Data Structure

[์ž๋ฃŒ๊ตฌ์กฐ] Chapter3. STACKS AND QUEUES(2)

by goguma.dev 2024. 10. 15.

โ€ป ์ด ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€๋“ค์€ knu EK.Ryu ๊ต์ˆ˜๋‹˜์˜ <์ž๋ฃŒ๊ตฌ์กฐ> ์ˆ˜์—…์„ ๋“ฃ๊ณ  ๋‚˜๋ฆ„๋Œ€๋กœ ํ•„์ž๊ฐ€ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

โ€ป ๋ถ€์กฑํ•œ ์„ค๋ช…์ด ์žˆ๊ฑฐ๋‚˜, ์ž˜๋ชป ์•Œ๊ณ  ์ž‘์„ฑํ•œ ๋ถ€๋ถ„์ด ๋ณด์ธ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿ˜Š

3.5 A Mazing Problem

๋ฏธ๋กœ(maze)๋Š” ์˜ค๋žซ๋™์•ˆ ํฅ๋ฏธ ์žˆ๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์‹คํ—˜ ์‹ฌ๋ฆฌํ•™์ž๋“ค์€ ์ฅ๊ฐ€ ๋ฏธ๋กœ์—์„œ ์Œ์‹์„ ์ฐพ๋„๋ก ํ›ˆ๋ จ์‹œ์ผœ ์™”๊ณ , ๋งŽ์€ ์ถ”๋ฆฌ ์ž‘๊ฐ€๋“ค์€ ์˜๊ตญ์‹ ์ •์› ๋ฏธ๋กœ๋ฅผ ์‚ด์ธ ์‚ฌ๊ฑด์˜ ๋ฐฐ๊ฒฝ์œผ๋กœ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋กœ๋Š” ์Šคํƒ์˜ ์ข‹์€ ์‘์šฉ์ด ๋˜๋ฏ€๋กœ ์šฐ๋ฆฌ๋„ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ€์ ธ ๋ด…์‹œ๋‹ค. ์ด ์ ˆ์—์„œ๋Š” ๋ฏธ๋กœ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ ๋ฏธ๋กœ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ธธ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ทจํ•˜๋‚˜, ์ผ๋‹จ ์˜ฌ๋ฐ”๋ฅธ ๊ธธ์„ ์ฐพ์€ ํ›„์—๋Š” ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๊ณง๋ฐ”๋กœ ๋ฏธ๋กœ๋ฅผ ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Maze: representation

ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์‹œ ์ œ์ผ ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ์€ ๋ฏธ๋กœ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฏธ๋กœ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋ง‰ํžŒ ๊ธธ์„ 1๋กœ, ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋Š” ๊ธธ์„ 0์œผ๋กœ ํ•œ 2์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

<๊ทธ๋ฆผ1. ์˜ˆ์ œ ๋ฏธ๋กœ>

 

์ด๋Ÿฌํ•œ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋œ ๋ฏธ๋กœ์—์„œ ๋ฏธ๋กœ ์†์˜ ์ฅ๋Š” ํ–‰๊ณผ ์—ด๋กœ ์–ธ์ œ๋“ ์ง€ ๊ทธ ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ X๊ฐ€ ํ˜„์žฌ์˜ ์œ„์น˜, maze[row][col]์„ ๋‚˜ํƒ€๋‚ธ๋‹ค๋ฉด ์•„๋ž˜์˜ ๊ทธ๋ฆผ2๋Š” ์ด ์œ„์น˜์—์„œ ์ด๋™ ๊ฐ€๋Šฅํ•œ 8๊ฐœ์˜ ์ธ์ ‘ ์œ„์น˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ์—ฌ๋Ÿ ๋ฐฉํ–ฅ์„ N, NE, E, SE, S, SW, W, NW๋กœ ๋ช…์„ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<๊ทธ๋ฆผ2. ๊ฐ€๋Šฅํ•œ ์ด๋™>

 

๋‹ค๋งŒ, ๋ชจ๋“  ์œ„์น˜๊ฐ€ 8๊ฐœ์˜ ์ธ์ ‘ ์œ„์น˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋งŒ์ผ [row][col]์ด ๋ฏธ๋กœ์˜ ๊ฐ€์žฅ์ž๋ฆฌ, ์ฆ‰ ๊ฒฝ๊ณ„์„ ์— ์žˆ๊ฒŒ ๋˜๋ฉด ์—ฌ๋Ÿ ๋ฐฉํ–ฅ์ด ์•„๋‹Œ ์˜ค์ง ์„ธ ๋ฐฉํ–ฅ๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ„ ์กฐ๊ฑด์˜ ํŠน์ด์„ฑ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฏธ๋กœ์˜ ์ฃผ์œ„๋ฅผ 1๋กœ ๋‘˜๋Ÿฌ์Œˆ์œผ๋กœ์จ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<๊ทธ๋ฆผ3. ๊ฒฝ๊ณ„์„ ์—์„œ ๊ฐ€๋Šฅํ•œ ์ด๋™>

 

<๊ทธ๋ฆผ4. ๊ฒฝ๊ณ„๋ฅผ 1๋กœ ๋‘˜๋Ÿฌ์‹ผ ๋ฏธ๋กœ>

 

 

๊ทธ๋Ÿฌ๋ฉด m * p ๋ฏธ๋กœ๋Š” (m+2) * (p+2) ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋•Œ, ๋ฏธ๋กœ์˜ ์ž…๊ตฌ๋Š” [1][1]์ด ๋˜๊ณ , ์ถœ๊ตฌ๋Š” [m][p]๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ด๋™ํ•  ๋ฐฉํ–ฅ๋“ค์„ ์•„๋ž˜์˜ ๊ทธ๋ฆผ5์™€ ๊ฐ™์ด ๋ฐฐ์—ด move์— ๋ฏธ๋ฆฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<๊ทธ๋ฆผ5. ์ด๋™ ํ…Œ์ด๋ธ”>

 

์—ฌ๊ธฐ์„œ 8๊ฐœ์˜ ๊ฐ€๋Šฅํ•œ ์ด๋™ ๋ฐฉํ–ฅ์€ 0์—์„œ 7๊นŒ์ง€์˜ ์ˆซ์ž๋กœ ๋‚˜ํƒ€๋‚ด๊ณ , ๊ฐ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด์„œ๋Š” ์ˆ˜ํ‰๊ณผ ์ˆ˜์ง ์ขŒํ‘œ์˜ ์˜คํ”„์…‹์œผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ C ์„ ์–ธ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

typedef struct {
	short int vert;
    short int horiz;
} offsets;
offsets move[8]; // ๊ฐ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ์ด๋™ ๋ฐฐ์—ด

 

์ด ์ƒํ™ฉ์—์„œ ํ˜„์žฌ์˜ ์œ„์น˜๋ฅผ maze[row][col]์ด๋ผ ํ•˜๋ฉด, ๋‹ค์Œ ์ด๋™ํ•  ์œ„์น˜ maze[nextRow][nextCol]์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

nextRow = row + move[dir].vert;
nextCol = col + move[dir].horiz;

 

๋ฏธ๋กœ๋ฅผ ์ด๋™ํ•  ๋•Œ์—๋Š” ์—ฌ๋Ÿฌ ๋ฐฉํ–ฅ์˜ ์„ ํƒ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์–ด๋–ค ๋ฐฉํ–ฅ์ด ์ตœ์ƒ์˜ ์„ ํƒ์ผ์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ํ˜„์žฌ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ณ  ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๋ฐฉํ–ฅ์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ˜„์žฌ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋งŒ์•ฝ ์ž˜๋ชป๋œ ๊ธธ๋กœ ๊ฐ€๋”๋ผ๋„ ๋˜๋Œ์•„์™€์„œ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (stack)

๋จผ์ € ๋ถ์ชฝ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€๋Šฅํ•œ ๋ฐฉํ–ฅ์„ ๊ฒ€์‚ฌํ•˜๊ณ , ํ•œ ๋ฒˆ ์‹œ๋„ํ–ˆ๋˜ ๊ธธ์„ ๋‹ค์‹œ ์‹œ๋„ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์‹œ๋„ํ–ˆ๋˜ ๊ธธ์„ ๋ฐฐ์—ด mark์— ๊ธฐ๋กํ•˜์—ฌ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐ์—ด mark๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , maze[row][col]์„ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋˜๋ฉด mark[row][col]์„ 1๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ฏธ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ด…์‹œ๋‹ค.

 

๋ฏธ๋กœ ํƒ์ƒ‰ ํ•จ์ˆ˜ ๊ตฌํ˜„

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define TRUE 1
#define FALSE 0
#define MAZE_SIZE 10
#define EXIT_ROW 8
#define EXIT_COL 8

// ์Šคํƒ์— ์ €์žฅ๋  ์œ„์น˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ตฌ์กฐ์ฒด
typedef struct {
    int row;    // ํ˜„์žฌ ํ–‰ ์œ„์น˜
    int col;    // ํ˜„์žฌ ์—ด ์œ„์น˜
    int dir;    // ์ด๋™ ๋ฐฉํ–ฅ
} element;

// ์ด๋™ ๋ฐฉํ–ฅ์„ ์ •์˜ํ•œ ๊ตฌ์กฐ์ฒด (vert๋Š” ์ˆ˜์ง ์ด๋™, horiz๋Š” ์ˆ˜ํ‰ ์ด๋™)
typedef struct {
    int vert;   // ์ˆ˜์ง ๋ฐฉํ–ฅ
    int horiz;  // ์ˆ˜ํ‰ ๋ฐฉํ–ฅ
} offsets;

// ์Šคํƒ๊ณผ ๊ด€๋ จ๋œ ๋ณ€์ˆ˜๋“ค
element stack[100];   // ์Šคํƒ ๋ฐฐ์—ด
int top;              // ์Šคํƒ์˜ ์ตœ์ƒ์œ„ ์ธ๋ฑ์Šค

// 8๋ฐฉํ–ฅ์œผ๋กœ์˜ ์ด๋™์„ ์ •์˜
offsets move[8] = {
    {-1, 0},  // ๋ถ์ชฝ
    {-1, 1},  // ๋ถ๋™์ชฝ
    {0, 1},   // ๋™์ชฝ
    {1, 1},   // ๋‚จ๋™์ชฝ
    {1, 0},   // ๋‚จ์ชฝ
    {1, -1},  // ๋‚จ์„œ์ชฝ
    {0, -1},  // ์„œ์ชฝ
    {-1, -1}  // ๋ถ์„œ์ชฝ
};

// ๋ฏธ๋กœ์™€ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฐ์—ด
int maze[MAZE_SIZE][MAZE_SIZE] = {
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 0, 0, 0, 1, 1, 1, 1, 1, 1},
    {1, 1, 1, 0, 1, 1, 0, 0, 0, 1},
    {1, 1, 1, 0, 0, 0, 0, 1, 0, 1},
    {1, 1, 1, 1, 1, 1, 0, 1, 0, 1},
    {1, 1, 1, 1, 1, 1, 0, 1, 0, 1},
    {1, 0, 0, 0, 0, 1, 0, 1, 0, 1},
    {1, 0, 1, 1, 0, 0, 0, 0, 0, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 0, 1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};

int mark[MAZE_SIZE][MAZE_SIZE];  // ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฐ์—ด

// ์Šคํƒ์—์„œ ์š”์†Œ๋ฅผ ๊บผ๋‚ด์˜ค๋Š” ํ•จ์ˆ˜ (pop)
element pop(int* top) {
    if (*top == -1) {
        printf("Stack is empty!\n");
        element dummy = { -1, -1, -1 }; // ๋นˆ ๊ฐ’ ๋ฐ˜ํ™˜
        return dummy;
    }
    else {
        return stack[(*top)--]; // ์Šคํƒ์—์„œ ์š”์†Œ๋ฅผ ๊บผ๋‚ด์„œ ๋ฐ˜ํ™˜
    }
}

// ์Šคํƒ์— ์š”์†Œ๋ฅผ ๋„ฃ๋Š” ํ•จ์ˆ˜ (push)
void push(element item) {
    stack[++top] = item;  // ์Šคํƒ์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€
}

// ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ํ•จ์ˆ˜ (์ด๋ฏธ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜)
void path(void) {
    int i, row, col, next_row, next_col, dir, found = FALSE;
    element position;

    // ์ถœ๋ฐœ์ (1,1)์„ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  ํ‘œ์‹œํ•˜๊ณ  ์Šคํƒ์— ์ €์žฅ
    mark[1][1] = 1;
    top = 0; // ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์„ 0์œผ๋กœ ์„ค์ •
    stack[0].row = 1;
    stack[0].col = 1;
    stack[0].dir = 1;

    // ์Šคํƒ์ด ๋น„์–ด ์žˆ์ง€ ์•Š๊ณ  ์ถœ๊ตฌ๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๊ณ„์† ํƒ์ƒ‰
    while (top > -1 && !found) {
        // ์Šคํƒ์—์„œ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊บผ๋‚ด์˜ด
        position = pop(&top);
        row = position.row;
        col = position.col;
        dir = position.dir;

        // 8๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ์‹œ์ž‘
        while (dir < 8 && !found) {
            next_row = row + move[dir].vert;
            next_col = col + move[dir].horiz;

            // ์ถœ๊ตฌ์— ๋„์ฐฉํ•œ ๊ฒฝ์šฐ
            if (next_row == EXIT_ROW && next_col == EXIT_COL)
                found = TRUE; // ์ถœ๊ตฌ๋ฅผ ์ฐพ์•˜๋‹ค๊ณ  ํ‘œ์‹œ
            else if (!maze[next_row][next_col] && !mark[next_row][next_col]) {
                // ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒฝ๋กœ๋ผ๋ฉด
                mark[next_row][next_col] = 1; // ๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  ํ‘œ์‹œ

                // ํ˜„์žฌ ์œ„์น˜๋ฅผ ์Šคํƒ์— ์ €์žฅ
                position.row = row;
                position.col = col;
                position.dir = ++dir; // ๋‹ค์Œ ๋ฐฉํ–ฅ์„ ์Šคํƒ์— ์ €์žฅ
                push(position);

                // ์ƒˆ ์œ„์น˜๋กœ ์ด๋™
                row = next_row;
                col = next_col;
                dir = 0; // ์ƒˆ๋กœ์šด ์œ„์น˜์—์„œ 8๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ๋‹ค์‹œ ์‹œ์ž‘
            }
            else {
                ++dir; // ์ด๋™ํ•  ์ˆ˜ ์—†์œผ๋ฉด ๋‹ค์Œ ๋ฐฉํ–ฅ์œผ๋กœ ์ „ํ™˜
            }
        }
    }

    // ๊ฒฝ๋กœ๋ฅผ ์ฐพ์€ ๊ฒฝ์šฐ
    if (found) {
        printf("The path is:\n");
        printf("row col\n");
        for (i = 0; i <= top; i++)
            printf("%2d%5d\n", stack[i].row, stack[i].col);
        printf("%2d%5d\n", row, col);
        printf("%2d%5d\n", EXIT_ROW, EXIT_COL);
    }
    // ๊ฒฝ๋กœ๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ
    else
        printf("The maze does not have a path\n");
}

// ๋ฉ”์ธ ํ•จ์ˆ˜
int main() {
    // mark ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” (0์œผ๋กœ ๋ชจ๋“  ์นธ์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์„ค์ •)
    for (int i = 0; i < MAZE_SIZE; i++)
        for (int j = 0; j < MAZE_SIZE; j++)
            mark[i][j] = 0;

    // ๋ฏธ๋กœ ๊ฒฝ๋กœ ํƒ์ƒ‰ ์‹œ์ž‘
    path();

    return 0;
}

 

path ๋ถ„์„: ๋ฏธ๋กœ์˜ ํฌ๊ธฐ๊ฐ€ ํ•จ์ˆ˜ path์˜ ์—ฐ์‚ฐ ์‹œ๊ฐ„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋กœ์˜ ๊ฐ ์œ„์น˜๋Š” ํ•œ ๋ฒˆ๋งŒ ๋ฐฉ๋ฌธ๋˜๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์—ฐ์‚ฐ ์‹œ๊ฐ„์€ O(m*p)์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ m๊ณผ p๋Š” ๊ฐ๊ฐ ๋ฏธ๋กœ์˜ ํ–‰๊ณผ ์—ด์ž…๋‹ˆ๋‹ค.


3.6 Evaluation of Expressions

์ˆ˜์‹์„ ํ‘œ๊ธฐํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ์‹์€ ๋‘ ํ”ผ์—ฐ์‚ฐ์ž ์‚ฌ์ด์— ์ดํ•ญ ์—ฐ์‚ฐ์ž๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•(infix notation)์ž…๋‹ˆ๋‹ค.

(๋ง์ด ๊ฑฐ์ฐฝํ•˜์ง€ 1 + 3, a // b ์™€ ๊ฐ™์€ ํ‘œํ˜„)

์ด ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์€ ์ˆ˜์‹์„ ์“ฐ๋Š” ๋ฐ ์žˆ์–ด์„œ ๊ฐ€์žฅ ๋ณดํŽธ์ ์ด์ง€๋งŒ ์ˆ˜์‹์„ ๊ณ„์‚ฐํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•(posifix notation)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ‘œ๊ธฐ๋ฒ•์—์„œ๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž ์ดํ›„์— ์˜ค๋Š”๋ฐ, ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•๊ณผ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์„ ๋น„๊ตํ•œ ํ‘œ๋ฅผ ๋ด…์‹œ๋‹ค.

<๊ทธ๋ฆผ6. ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•๊ณผ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•>

 

ํ›„์œ„ ํ‘œ๊ธฐ์‹์˜ ์—ฐ์‚ฐ

์ค‘์œ„ ํ‘œ๊ธฐ๋ฅผ ํ›„์œ„ ํ‘œ๊ธฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์—, ํ›„์œ„ ํ‘œ๊ธฐ์‹์„ ์‰ฝ๊ฒŒ ์—ฐ์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋จผ์ € ๋‹ค๋ค„๋ด…์‹œ๋‹ค.