SlideShare ist ein Scribd-Unternehmen logo
1 von 19
과제수행일지
                                                             조원소개
소
                  B2                       조장                              강승우
속                                        자료조사                     강성태 김남희 고충욱
                                        프로그래밍                              김도형
과제수
                                                        3주                          6         시간
행기간
                                             주 제
연구제
      말의 이동
 목
                                          참 고 자 료
      ※ 출처 : 네이버 지식인

      http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=64601805&qb=aW5maXgg

참고 cG9zdGZpeCDrsJTqvrjripQg67Cp67KV&enc=utf8&section=kin&rank=4&search_sort=0&spq=

URL 0

      ※ 출처 : 네이버 블로그

      (http://cafe.naver.com/clickhdwork.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=709&)


                                          과제의 수행

첫째날                      2012년                     3월                27일                      화요일

회의
                                조원 자기소개 및 역할분담, 과제 파악
주제

      ※말의 여행에 대한 문제 파악

      이번과제는 말이 장기판위를 이동하는 좌표를 출력하는 과제이다.

회의 과제에 필요한 개념들은 스택, 큐, 백트래킹, infix expression, postfix expression 이

내용 있고 파스칼 삼각형과제에 있었던 시간복잡도와 공간복잡도의 계산도 있기에

      공부를 하였지만 부족했던 시간복잡도와 공간복잡도에 대한 개념조사와 이해를

      세밀하게 해보기로 하였습니다. 그리고 말의 여행에 대한 프로그램을 설계를
하기위해 알고리즘 조사를 하기로 하여 역할분담을 하였습니다.

       보고서 작성 : 강승우

      프로그래밍 : 김도형

      자료조사 : 고충욱, 강성태, 김남희

문제점 - 과제에 대한 사전조사 부족

      과제에 대한 사전조사가 없었기 때문에 토의 범위를 넓게 하지못하여
반성
      많은 내용을 토의하지 못하였습니다.
둘째날                2012년           3월         29일            목요일

회의주
                  조사해온 자료들의 개념이해, 프로그램 소스의 설계 방법
 제


      스택

      ∎기억 장치에 데이터를 일시적으로 겹쳐 쌓아 두었다가 필요할 때에 꺼내서 사용할 수

      있게 주기억장치(main memory)나 레지스터(register)의 일부를 할당하여 사용하는

      임시 기억장치를 말한다.

      ∎스택의 최상단 데이터 위치를 가리켜주는 변수를 탑(top)이라고 한다.

      ∎탑 한쪽끝에서만 삽입과 삭제의 연산(operation)이 일어나는 순서 리스트를 말한다.
회의내
      ※ 출처 : 네이버 지식사전
 용
      큐

      ∎리스트의 한쪽 끝에서만 삽입과 삭제가 일어나는 스택과는 달리 리스트의 한쪽

      끝에서 는 원소들이 삭제되고 반대쪽 끝에서는 원소들의 삽입만 가능하게 만든

      순서화된 리스트.

      ※ 출처 : 네이버 지식사전


      백트래킹(퇴각검색)
∎문제의 해를 탐색하는 체계적인 방법

∎주어진 조건을 만족하는 최적해 또는 해들의 집합들을 찾는 문제를 대상으로 하며,

효율적인 알고리즘이 존재하지 않을 때 사용한다.

∎백트래킹을 사용하기 위해 재귀에 대하여 알아야 한다.

⋅재귀

- 함수내에서 직접적 혹은 간접적으로 자기 자신을 호출하는 것

- 주의 할 점

① 반드시 종료조건이 있어야 한다.

② 단순하게 코딩 할 수 있다.

③ 내부적으로 스택 메모리(정적영역)를 사용한다.

④ 과다 호출시 스택 오버플러가 발생 할 수 있다.


infix expression(중위 연산자) => postfix expression(후위 연산자)

∎ 연산자의 infix 표기를 postfix 로 바꿀 때에는 대개 스틱을 이용합니다

∎ 모든 수식을 연산자, 피연산자로 구분합니다. 이때, 연산자, 피연산자 각각이 하나의

단위로 동작하게 된다.

① 수식에서 첫번째 항목을 빼냅니다.

② 수식의 빼낸 항목이 피연산자라면 그대로 출력측으로 빼냅니다

③ 수식의 빼낸 항목이 연산자라면 스택의 최상위 원소와 비교합니다.

④ 빼낸 연산자의 우선순위가 스택의 최상위에 있는 원소보다 높으면 그대로

스택에 넣습니다.

⑤ 그렇지 않다면 스택의 최상위 원소를 출력측으로 뺴내고 빼낸 연산자를

스택에 넣습니다.

⑥ 단, 여는 괄호'('가 나오면 닫는괄호')'가 나올 때까지 스택에 남아있게 되며,

닫는괄호')'가 나타나면 그때까지 여는괄호'('보다 상위에 있는 모든 연산자를
출력측으로 빼냅니다.

      위의 자료조사를 통해서 백트래킹은 말의 이동경로가 막혔을때 왔던 좌표를 하나씩

      뒤로 돌아가면서 이동경로가 있는지 확인해 주는 역할을 하고 그것을 저장 해두는게

      스택이고 화면에 출력을 할때 차례대로 하기위해 큐를 사용하는 것 같다는 토의내용이

      나왔고 이를 통해 스택, 큐, 백트래킹은 함수가 아닌 그냥 용어 라는것을 알아냈습니다.

      - 개념들의 이해부족
문제점
      - 프로그램과 조사한 자료들의 연관성

      자료조사해온 개념들에 대한 토의를 하였는데 프로그램을 설계하면서 개념들이

반성
      프로그램에 어떻게 쓰이는지 그 연관성의 대한 이해가 부족하여 더 세밀한 자료조사를
      통해 각자의 생각을 토의하도록 해야겠습니다.
셋째날                 2012년              4월            03일              화요일

회의주
                            시간복잡도와 공간복잡도 이해
 제



      공간복잡도

      주어진 알고리즘을 실행시키기 위해 필요한 기억장치(space)는 다음과 같이 두 가지로

      분류해 볼 수 있다.

      1.알고리즘과   무관한      부분: 알고리즘의     특성과는    무관한   부분으로 프로그램 코드를

회의내 저장하기 위한 공간, 프로그램을 수행하기 위해 시스템이 필요로 하는 공간 등이 이에

 용    포함된다.

      2.알고리즘과 밀접한 부분: 알고리즘의 특성과 밀접한 관계가 있는 부분으로서 문제를

      해결하기 위해 필요로 하는 공간을 의미한다. 즉, 변수를 저장하기 위한 공간이나 순환

      프로그램일 경우 순환 스택(recursion stack) 등이 이에 포함된다.

      일반적으로     알고리즘의     공간 복잡도를      분석할때는   위의    두가지중   두   번째의    것을

      계산하게    된다.   즉,   알고리즘이   문제를   해결하기    위해서    반드시   필요한   부분만을
계산함으로써 주어진 알고리즘의 공간 복잡도를 계산한다.

다음은 공간 복잡도를 구하는 예이다.

[예제 4.1] 공간 복잡도의 계산 1

float abc(float a, float b, float c)

{

return(a + b + b*c + (a + b - c)/(a + b) + 4.0);

}

공간 복잡도 = 0

위의 프로그램에서 공간복잡도를 구하기 위해서 살펴볼 것은 변수 a, b, c 이다. 따라서,

float 형의 변수가 한 워드(word)를 차지한다고 가정하면, 공간복잡도는 '3 워드'라고 생각할

수 있다. 그러나 변수 a, b, c 는 전달되는 인자(parameter)로서 함수 abc 내에서

해결하고자 하는 문제와는 무관하다고 볼 수 있으므로 공간 복잡도는 0 이다.

[예제 4.2] 공간 복잡도 계산 2

float Sum(float a[], int n)

{

float s = 0.0;

for(int i = 1; i < = n; i++)

s += a[i];

return s;

}

공간 복잡도 = n + 3

위의 프로그램에서 사용되는 변수는 a[], n, s, i 이다. 이번 예에서도 a[]와 n 은 인자로 전달

됨을 볼 수 있다. 그러나 [예제 4.1]과는 다르게 변수 a[]는 합을 구하기 위하여 반복문

내에서 n 개의 원소가 모두 참조되고 있음을 볼 수 있다. 또한, n 은 for-문을 벗어나기 위한
한계값으로 사용된다. 따라서 a[]와 n 은 알고리즘이 해결하고자 하는 문제와 밀접한

     관련이 있다고 볼 수 있다. 그러므로 프로그램의 복잡도는 (a[]를 저장하기 위한 공간) +

     (변수 n, s, I 를 위한 공간) = n + 3 이 된다.

     [예제 4.3] 공간 복잡도 계산 3

     float RSum(float a[], int n)

     {

     if(n <= 0)

     return (0.0);

     else

     return (RSum(a, n-1) + a[n]);

     }

     공간 복잡도 = 3(n + 1)

     위의 프로그램은 순환기법(resursion)으로 작성된 것이다. 위의 경우 살펴볼 변수는 a[],

     n 이다. 우선 변수 n 은 if-문 내에서 순환의 한계값으로 사용되고 있음을 볼 수 있다. 또한,

     변수 a[]는 합을 구하기 위하여 사용되고 있으며 a[]의 원소 중에서 n 번째의 원소만

     필요로 한다. 따라서 변수 a[]와 n 이 모두 알고리즘과 밀접한 관계가 있으므로, 프로그램이

     필요로 하는 공간은 (a[]의 n 번째 원소를 의한 공간) + (n 을 위한 공간) = 1 + 1 으로 볼 수

     있다.     그러나       위의     프로그램은   순환기법에   의해   작성되었음을   고려해야   한다.   즉,

     프로그램이 순환적으로 실행될 것을 고려해서 몇번의 순환후에 실행이 종료되는지(the

     depth of recursion)를 계산해야 하며, 또한 순환을 위해서 필요한 복귀 주소(return

     address)를 저장할 공간도 계산해야 한다. 그러므로 프로그램의 공간 복잡도는 (depth of

     recursion)×(a[n], n, 복귀 주소를 위한 공간) = (n+1)×3 이 된다.

문제점 -정확한 시간 공간복잡도 이해 부족

     토의를 했음에도 불구하고 복잡도의 이해가 부족하였습니다. 개인적으로 보충을하여
반성
다시 토의를 해야겠습니다.
넷째날                             2012년                    4월   5일   목요일

회의주
                                                 프로그램 초안 토의
 제

      #include <stdio.h>

      #define X_SIZE 9

      #define Y_SIZE 10

      #define NUM_WAYS 8

      #define LONG 90

      typedef int board_t[X_SIZE][Y_SIZE];

      int dx[NUM_WAYS] = {-2, -1, 1, 2, 2, 1, -1, -2};

      int dy[NUM_WAYS] = {1, 2, 2, 1, -1, -2, -2, -1};

      int ax[LONG];

      int ay[LONG];

      void print_board(board_t board)
회의내
      {
 용
      int i, j;

      for (i=0; i<X_SIZE; i++)

      {

      for (j=0; j<Y_SIZE; j++)

      printf("%dt", board[i][j]);

      printf("n");

      }

      }

      void Start(board_t board)

      {

      int i, j;
for (i=0; i<X_SIZE; i++)

for (j=0; j<Y_SIZE; j++)

board[i][j] = -1;

}

int InBoard(int x, int y)

{

return x >= 0 && x < X_SIZE && y >= 0 && y < Y_SIZE;

}

int Access(board_t board, int x, int y)

{

return InBoard(x, y) && board[x][y] == -1;

}

int num_next_moves(board_t board, int x, int y)

{

int i, result=0;

for (i=0; i<NUM_WAYS; i++)

if (Access(board, x+dx[i], y+dy[i]))

result++;

return result;

}

int main()

{

int x, y, move=1, next,test;

board_t board;

Start(board);

while (1)

{
printf("시작좌표를 입력하세요 ");

scanf("%d %d", &x, &y);

if (InBoard(x, y)) break

printf("장기판을 벗어난 좌표입니다n");

}

board[x][y] = 0;

ax[0]=x;

ay[0]=y;

for(move=1; move < X_SIZE*Y_SIZE; move++)

for(next=0;next<8;next++)

{

x = x + dx[next];

y = y + dy[next];

test=Access(board,x,y);

if(test!=1)

{

x = x - dx[next];

y = y - dy[next];

}

else

{

if(num_next_moves(board, x, y)==0)

{

x = x - dx[next];

y = y - dy[next];

}

else
{

      if(x==ax[move]&&y==ay[move])

      {

      board[x][y] = -1;

      x = x - dx[next];

      y = y - dy[next];

      continue

      }

      board[x][y] = move;

      ax[move]=x;

      ay[move]=y;

      break

      }

      }

      }a

      for(move=0;move<90;move++)

      printf("%d,%d ",ax[move],ay[move]);

      printf("n");

      print_board(board);

      }

문제점 스택 사용이 안되었고 장기판을 모두 채우지 못하고 프로그램이 종료된다.

      아직 스택 구현을 제대로 하지못하고 있습니다. 더욱더 노력하여 스택 구현에 힘을 써야
반성
      겠습니다.

                                            결과 발표

프로그 #include <stdio.h>

 램    /* definitions */

소스 #define X_SIZE 10
#define Y_SIZE 9

#define ways 8

#define LONG 90

typedef int board_t[X_SIZE][Y_SIZE];

int dx[ways] = {-2, -1, 1, 2, 2, 1, -1, -2};

int dy[ways] = {1, 2, 2, 1, -1, -2, -2, -1};

// Stack 선언부

int STX[LONG] = {0};

int STY[LONG] = {0};

int s_t=-1;//stack_top

int s_way=0;

void add_s(int x,int y)

{

STX[++s_t]=x;

STY[s_t]=y;

}

int pop_x()

{

return STX[s_t];

}

int pop_y()

{

return STY[s_t--];

}
//출력 함수 선언부

void print_point(board_t board)

{

int u;

for(u=0; u<90; u++)

printf("(%d,%d) ",STX[u],STY[u]);

}

void print_board(board_t board)

{

int i, j;

for (i=0; i<X_SIZE; i++)

{

for (j=0; j<Y_SIZE; j++)

printf("%dt", board[i][j]);

printf("n");

}

}

//조건 함수 선언부

void Start(board_t board)//배열 -1 로 초기화

{

int i, j;

for (i=0; i<X_SIZE; i++)

for (j=0; j<Y_SIZE; j++)

board[i][j] = -1;
}

int InBoard(int x, int y)//장기판 안에 있는지 판별

{

return x >= 0 && x < X_SIZE && y >= 0 && y < Y_SIZE;

}

int Access(board_t board, int x, int y)//장기판 안에 있고 중복이동이 아닌지 판별

{

return InBoard(x, y) && board[x][y] == -1;

}

int NextMoves(board_t board, int x, int y)//움직일수 있는 경로가 몇군대인지 result 값을

카운트 한다

{

int i, result=0;

for (i=0; i<ways; i++)

if (Access(board, x+dx[i], y+dy[i]))

result++;

return result;

}

int new_move(board_t board, int x, int y);

int MinNextWay(board_t board, int x, int y)//다음 움직일수있는 경우가 가장 작은곳으로

이동한다(단 이동경로가 0 이 아닌 경우)

{

int i, min = ways, result=0;

for (i=0; i<ways; i++)
if (Access(board, x+dx[i], y+dy[i]) && NextMoves(board, x+dx[i], y+dy[i]) < min)

{

min = NextMoves(board, x+dx[i], y+dy[i]);

result = i;

}

return result;

}

void InPoint(board_t board, int x, int y)

{

int way;

for (;s_t+1<X_SIZE*Y_SIZE;)

{

if (NextMoves(board, STX[s_t], STY[s_t]) == 0)

{

board[x][y] = -1;

pop_x();

pop_y();

}

way = MinNextWay(board, x, y);

x = x + dx[way];

y = y + dy[way];

add_s(x,y);

board[x][y] = s_t;

}
}

int ssway[90]={0};

void Rway(board_t board, int x,int y)//x=stx, y=sty

{

printf("s_t?%dn",s_t);

printf("ssway[s_t]?%dn",ssway[s_t+1]);

if(s_t>=87)//스텍이 90 개 쌓이면 끝내기

{

printf("쫑");

return;

}

else if(InBoard(x, y)&&NextMoves(board, x, y)>0)

{

printf("들왔? %dn",ssway[s_t+1]);

x = STX[s_t] + dx[ssway[s_t+1]];

y = STY[s_t] + dy[ssway[s_t+1]];

if(Access(board, x, y))//이동한곳이 되는 자리면 ?

{

printf("들왔 A %dn",ssway[s_t+1]);

add_s(x,y);

board[STX[s_t]][STY[s_t]] = s_t;

Rway(board,STX[s_t],STY[s_t]);//제귀 실행

}

else if(ssway[s_t+1]>=7)//8 번째 경우까지 이동할곳이 없으면 팝
{

printf("빠꾸 2n");

board[STX[s_t]][STY[s_t]] = -1;

ssway[s_t+1]=0;

pop_x();

pop_y();

ssway[s_t+1]++;//팝한곳 다른길로

Rway(board,STX[s_t],STY[s_t]);

}

else

{

printf("빠꾸 1n");

ssway[s_t+1]++;

printf("%dn",ssway[s_t+1]);

Rway(board,STX[s_t],STY[s_t]);

}

}

else

{

printf("빠꾸 3n");

board[STX[s_t]][STY[s_t]] = -1;

ssway[s_t+1]=0;

pop_x();

pop_y();
ssway[s_t+1]++;//팝한곳 다른길로

Rway(board,STX[s_t],STY[s_t]);

}

}

int main()

{

int x,y, way=0;

board_t board;

Start(board);

while (1)

{

printf("시작좌표를 입력하시오 ");

scanf("%d %d", &x, &y);

fflush(stdin);

if (InBoard(x, y)) break;

printf("장기판 벗어난 좌표입니다n");

}

add_s(x,y);

board[STX[s_t]][STY[s_t]] = s_t;

printf("%d,%d",STX[s_t],STY[s_t]);

printf("%dn",board[STX[s_t]][STY[s_t]]);

Rway(board, STX[s_t], STY[s_t]);

//InPoint(board,STX[s_t],STY[s_t]);

print_board(board);
print_point(board);

}
최종 되돌아오는 퇴각 검색을 계속할 경우 프로그램 오버플로어 오류가 나므로 휴리스틱의
반성 법칙을 이용하여 문제를 해결하였 습니다.

Weitere ähnliche Inhalte

Was ist angesagt?

자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서KimChangHoen
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5KoChungWook
 
2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01seonhyung
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdolsseungdols
 
Mathematics
MathematicsMathematics
Mathematicsskku_npc
 
문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의Kwangyoun Jung
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서KimChangHoen
 
자료구조 02 최종 보고서
자료구조 02 최종 보고서자료구조 02 최종 보고서
자료구조 02 최종 보고서pkok15
 
파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트itproman35
 
Project#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpProject#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpKimjeongmoo
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석용 최
 
Tensorflow for Deep Learning(SK Planet)
Tensorflow for Deep Learning(SK Planet)Tensorflow for Deep Learning(SK Planet)
Tensorflow for Deep Learning(SK Planet)Tae Young Lee
 

Was ist angesagt? (19)

자료구조1보고서
자료구조1보고서자료구조1보고서
자료구조1보고서
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5
 
2012 Ds B1 01
2012 Ds B1 012012 Ds B1 01
2012 Ds B1 01
 
파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝
 
3콤비네이션
3콤비네이션3콤비네이션
3콤비네이션
 
Text summarization
Text summarizationText summarization
Text summarization
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols
 
Mathematics
MathematicsMathematics
Mathematics
 
문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서
 
자료구조 02 최종 보고서
자료구조 02 최종 보고서자료구조 02 최종 보고서
자료구조 02 최종 보고서
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트
 
Project#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort HwpProject#3 How Fast Can We Sort Hwp
Project#3 How Fast Can We Sort Hwp
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)
 
Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석
 
Tensorflow for Deep Learning(SK Planet)
Tensorflow for Deep Learning(SK Planet)Tensorflow for Deep Learning(SK Planet)
Tensorflow for Deep Learning(SK Planet)
 

Andere mochten auch

Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivasJOSEYENIBORGES
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentationdogtipper
 
이산치수학 Project4
이산치수학 Project4이산치수학 Project4
이산치수학 Project4KoChungWook
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4KoChungWook
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivasJOSEYENIBORGES
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2KoChungWook
 
Equations & Expressions Sub Unit B
Equations & Expressions Sub Unit BEquations & Expressions Sub Unit B
Equations & Expressions Sub Unit Bmrsfrasure
 
자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1KoChungWook
 
이산치수학 Project6
이산치수학 Project6이산치수학 Project6
이산치수학 Project6KoChungWook
 
Geometry Unit Slideshow
Geometry Unit SlideshowGeometry Unit Slideshow
Geometry Unit Slideshowmrsfrasure
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
Social Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkSocial Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkJane Frankland
 
Presentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisPresentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisrenskepat
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Activitat 11
Activitat 11Activitat 11
Activitat 11jgalan33
 
Story board
Story boardStory board
Story board10ggo
 

Andere mochten auch (20)

Budget 2013
Budget 2013Budget 2013
Budget 2013
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivas
 
"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation"Getting Creative with Social Media" BlogPaws Presentation
"Getting Creative with Social Media" BlogPaws Presentation
 
이산치수학 Project4
이산치수학 Project4이산치수학 Project4
이산치수학 Project4
 
자료구조 Project4
자료구조 Project4자료구조 Project4
자료구조 Project4
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Universidad fermín toro diapositivas
Universidad fermín toro diapositivasUniversidad fermín toro diapositivas
Universidad fermín toro diapositivas
 
이산치수학 Project2
이산치수학 Project2이산치수학 Project2
이산치수학 Project2
 
Equations & Expressions Sub Unit B
Equations & Expressions Sub Unit BEquations & Expressions Sub Unit B
Equations & Expressions Sub Unit B
 
자료구조 Project1
자료구조 Project1자료구조 Project1
자료구조 Project1
 
이산치수학 Project6
이산치수학 Project6이산치수학 Project6
이산치수학 Project6
 
Geometry Unit Slideshow
Geometry Unit SlideshowGeometry Unit Slideshow
Geometry Unit Slideshow
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
Klik today
Klik todayKlik today
Klik today
 
Social Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time TalkSocial Media to Enable Sales for Natwest Summer Time Talk
Social Media to Enable Sales for Natwest Summer Time Talk
 
Presentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuisPresentatie 26 juni 2012 boven ij ziekenhuis
Presentatie 26 juni 2012 boven ij ziekenhuis
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Activitat 11
Activitat 11Activitat 11
Activitat 11
 
Story board
Story boardStory board
Story board
 
Azteca Mango
Azteca MangoAzteca Mango
Azteca Mango
 

Ähnlich wie 자료구조 Project2

2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02chl132435
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서KimChangHoen
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)pchmago
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)arong1234
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfkd19h
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfjinwookhong
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7mil23
 
Project#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 HwpProject#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 HwpKimjeongmoo
 
2데이터베이스 시스템
2데이터베이스 시스템2데이터베이스 시스템
2데이터베이스 시스템herojoon1378
 
이산치6보고서
이산치6보고서이산치6보고서
이산치6보고서KimChangHoen
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6KoChungWook
 
이산수학 D1 프로젝트 2
이산수학 D1 프로젝트 2이산수학 D1 프로젝트 2
이산수학 D1 프로젝트 2pkok15
 
2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdfjinwookhong
 
2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdfkd19h
 
2012 Dm C3 06
2012 Dm C3 062012 Dm C3 06
2012 Dm C3 06chl132435
 

Ähnlich wie 자료구조 Project2 (20)

2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)2012 Dm B3 보고서(06박찬흥)
2012 Dm B3 보고서(06박찬흥)
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)2012 Dm B3 보고서(10백지원)
2012 Dm B3 보고서(10백지원)
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7
 
자료구조02
자료구조02자료구조02
자료구조02
 
Project#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 HwpProject#2 데이터베이스 시스템 Hwp
Project#2 데이터베이스 시스템 Hwp
 
2데이터베이스 시스템
2데이터베이스 시스템2데이터베이스 시스템
2데이터베이스 시스템
 
이산치6보고서
이산치6보고서이산치6보고서
이산치6보고서
 
자료구조 Project6
자료구조 Project6자료구조 Project6
자료구조 Project6
 
이산수학 D1 프로젝트 2
이산수학 D1 프로젝트 2이산수학 D1 프로젝트 2
이산수학 D1 프로젝트 2
 
2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf
 
2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf2012 Dm A0 01 Pdf
2012 Dm A0 01 Pdf
 
2012 Dm C3 06
2012 Dm C3 062012 Dm C3 06
2012 Dm C3 06
 

자료구조 Project2

  • 1. 과제수행일지 조원소개 소 B2 조장 강승우 속 자료조사 강성태 김남희 고충욱 프로그래밍 김도형 과제수 3주 6 시간 행기간 주 제 연구제 말의 이동 목 참 고 자 료 ※ 출처 : 네이버 지식인 http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=64601805&qb=aW5maXgg 참고 cG9zdGZpeCDrsJTqvrjripQg67Cp67KV&enc=utf8&section=kin&rank=4&search_sort=0&spq= URL 0 ※ 출처 : 네이버 블로그 (http://cafe.naver.com/clickhdwork.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=709&) 과제의 수행 첫째날 2012년 3월 27일 화요일 회의 조원 자기소개 및 역할분담, 과제 파악 주제 ※말의 여행에 대한 문제 파악 이번과제는 말이 장기판위를 이동하는 좌표를 출력하는 과제이다. 회의 과제에 필요한 개념들은 스택, 큐, 백트래킹, infix expression, postfix expression 이 내용 있고 파스칼 삼각형과제에 있었던 시간복잡도와 공간복잡도의 계산도 있기에 공부를 하였지만 부족했던 시간복잡도와 공간복잡도에 대한 개념조사와 이해를 세밀하게 해보기로 하였습니다. 그리고 말의 여행에 대한 프로그램을 설계를
  • 2. 하기위해 알고리즘 조사를 하기로 하여 역할분담을 하였습니다. 보고서 작성 : 강승우 프로그래밍 : 김도형 자료조사 : 고충욱, 강성태, 김남희 문제점 - 과제에 대한 사전조사 부족 과제에 대한 사전조사가 없었기 때문에 토의 범위를 넓게 하지못하여 반성 많은 내용을 토의하지 못하였습니다. 둘째날 2012년 3월 29일 목요일 회의주 조사해온 자료들의 개념이해, 프로그램 소스의 설계 방법 제 스택 ∎기억 장치에 데이터를 일시적으로 겹쳐 쌓아 두었다가 필요할 때에 꺼내서 사용할 수 있게 주기억장치(main memory)나 레지스터(register)의 일부를 할당하여 사용하는 임시 기억장치를 말한다. ∎스택의 최상단 데이터 위치를 가리켜주는 변수를 탑(top)이라고 한다. ∎탑 한쪽끝에서만 삽입과 삭제의 연산(operation)이 일어나는 순서 리스트를 말한다. 회의내 ※ 출처 : 네이버 지식사전 용 큐 ∎리스트의 한쪽 끝에서만 삽입과 삭제가 일어나는 스택과는 달리 리스트의 한쪽 끝에서 는 원소들이 삭제되고 반대쪽 끝에서는 원소들의 삽입만 가능하게 만든 순서화된 리스트. ※ 출처 : 네이버 지식사전 백트래킹(퇴각검색)
  • 3. ∎문제의 해를 탐색하는 체계적인 방법 ∎주어진 조건을 만족하는 최적해 또는 해들의 집합들을 찾는 문제를 대상으로 하며, 효율적인 알고리즘이 존재하지 않을 때 사용한다. ∎백트래킹을 사용하기 위해 재귀에 대하여 알아야 한다. ⋅재귀 - 함수내에서 직접적 혹은 간접적으로 자기 자신을 호출하는 것 - 주의 할 점 ① 반드시 종료조건이 있어야 한다. ② 단순하게 코딩 할 수 있다. ③ 내부적으로 스택 메모리(정적영역)를 사용한다. ④ 과다 호출시 스택 오버플러가 발생 할 수 있다. infix expression(중위 연산자) => postfix expression(후위 연산자) ∎ 연산자의 infix 표기를 postfix 로 바꿀 때에는 대개 스틱을 이용합니다 ∎ 모든 수식을 연산자, 피연산자로 구분합니다. 이때, 연산자, 피연산자 각각이 하나의 단위로 동작하게 된다. ① 수식에서 첫번째 항목을 빼냅니다. ② 수식의 빼낸 항목이 피연산자라면 그대로 출력측으로 빼냅니다 ③ 수식의 빼낸 항목이 연산자라면 스택의 최상위 원소와 비교합니다. ④ 빼낸 연산자의 우선순위가 스택의 최상위에 있는 원소보다 높으면 그대로 스택에 넣습니다. ⑤ 그렇지 않다면 스택의 최상위 원소를 출력측으로 뺴내고 빼낸 연산자를 스택에 넣습니다. ⑥ 단, 여는 괄호'('가 나오면 닫는괄호')'가 나올 때까지 스택에 남아있게 되며, 닫는괄호')'가 나타나면 그때까지 여는괄호'('보다 상위에 있는 모든 연산자를
  • 4. 출력측으로 빼냅니다. 위의 자료조사를 통해서 백트래킹은 말의 이동경로가 막혔을때 왔던 좌표를 하나씩 뒤로 돌아가면서 이동경로가 있는지 확인해 주는 역할을 하고 그것을 저장 해두는게 스택이고 화면에 출력을 할때 차례대로 하기위해 큐를 사용하는 것 같다는 토의내용이 나왔고 이를 통해 스택, 큐, 백트래킹은 함수가 아닌 그냥 용어 라는것을 알아냈습니다. - 개념들의 이해부족 문제점 - 프로그램과 조사한 자료들의 연관성 자료조사해온 개념들에 대한 토의를 하였는데 프로그램을 설계하면서 개념들이 반성 프로그램에 어떻게 쓰이는지 그 연관성의 대한 이해가 부족하여 더 세밀한 자료조사를 통해 각자의 생각을 토의하도록 해야겠습니다. 셋째날 2012년 4월 03일 화요일 회의주 시간복잡도와 공간복잡도 이해 제 공간복잡도 주어진 알고리즘을 실행시키기 위해 필요한 기억장치(space)는 다음과 같이 두 가지로 분류해 볼 수 있다. 1.알고리즘과 무관한 부분: 알고리즘의 특성과는 무관한 부분으로 프로그램 코드를 회의내 저장하기 위한 공간, 프로그램을 수행하기 위해 시스템이 필요로 하는 공간 등이 이에 용 포함된다. 2.알고리즘과 밀접한 부분: 알고리즘의 특성과 밀접한 관계가 있는 부분으로서 문제를 해결하기 위해 필요로 하는 공간을 의미한다. 즉, 변수를 저장하기 위한 공간이나 순환 프로그램일 경우 순환 스택(recursion stack) 등이 이에 포함된다. 일반적으로 알고리즘의 공간 복잡도를 분석할때는 위의 두가지중 두 번째의 것을 계산하게 된다. 즉, 알고리즘이 문제를 해결하기 위해서 반드시 필요한 부분만을
  • 5. 계산함으로써 주어진 알고리즘의 공간 복잡도를 계산한다. 다음은 공간 복잡도를 구하는 예이다. [예제 4.1] 공간 복잡도의 계산 1 float abc(float a, float b, float c) { return(a + b + b*c + (a + b - c)/(a + b) + 4.0); } 공간 복잡도 = 0 위의 프로그램에서 공간복잡도를 구하기 위해서 살펴볼 것은 변수 a, b, c 이다. 따라서, float 형의 변수가 한 워드(word)를 차지한다고 가정하면, 공간복잡도는 '3 워드'라고 생각할 수 있다. 그러나 변수 a, b, c 는 전달되는 인자(parameter)로서 함수 abc 내에서 해결하고자 하는 문제와는 무관하다고 볼 수 있으므로 공간 복잡도는 0 이다. [예제 4.2] 공간 복잡도 계산 2 float Sum(float a[], int n) { float s = 0.0; for(int i = 1; i < = n; i++) s += a[i]; return s; } 공간 복잡도 = n + 3 위의 프로그램에서 사용되는 변수는 a[], n, s, i 이다. 이번 예에서도 a[]와 n 은 인자로 전달 됨을 볼 수 있다. 그러나 [예제 4.1]과는 다르게 변수 a[]는 합을 구하기 위하여 반복문 내에서 n 개의 원소가 모두 참조되고 있음을 볼 수 있다. 또한, n 은 for-문을 벗어나기 위한
  • 6. 한계값으로 사용된다. 따라서 a[]와 n 은 알고리즘이 해결하고자 하는 문제와 밀접한 관련이 있다고 볼 수 있다. 그러므로 프로그램의 복잡도는 (a[]를 저장하기 위한 공간) + (변수 n, s, I 를 위한 공간) = n + 3 이 된다. [예제 4.3] 공간 복잡도 계산 3 float RSum(float a[], int n) { if(n <= 0) return (0.0); else return (RSum(a, n-1) + a[n]); } 공간 복잡도 = 3(n + 1) 위의 프로그램은 순환기법(resursion)으로 작성된 것이다. 위의 경우 살펴볼 변수는 a[], n 이다. 우선 변수 n 은 if-문 내에서 순환의 한계값으로 사용되고 있음을 볼 수 있다. 또한, 변수 a[]는 합을 구하기 위하여 사용되고 있으며 a[]의 원소 중에서 n 번째의 원소만 필요로 한다. 따라서 변수 a[]와 n 이 모두 알고리즘과 밀접한 관계가 있으므로, 프로그램이 필요로 하는 공간은 (a[]의 n 번째 원소를 의한 공간) + (n 을 위한 공간) = 1 + 1 으로 볼 수 있다. 그러나 위의 프로그램은 순환기법에 의해 작성되었음을 고려해야 한다. 즉, 프로그램이 순환적으로 실행될 것을 고려해서 몇번의 순환후에 실행이 종료되는지(the depth of recursion)를 계산해야 하며, 또한 순환을 위해서 필요한 복귀 주소(return address)를 저장할 공간도 계산해야 한다. 그러므로 프로그램의 공간 복잡도는 (depth of recursion)×(a[n], n, 복귀 주소를 위한 공간) = (n+1)×3 이 된다. 문제점 -정확한 시간 공간복잡도 이해 부족 토의를 했음에도 불구하고 복잡도의 이해가 부족하였습니다. 개인적으로 보충을하여 반성
  • 7. 다시 토의를 해야겠습니다. 넷째날 2012년 4월 5일 목요일 회의주 프로그램 초안 토의 제 #include <stdio.h> #define X_SIZE 9 #define Y_SIZE 10 #define NUM_WAYS 8 #define LONG 90 typedef int board_t[X_SIZE][Y_SIZE]; int dx[NUM_WAYS] = {-2, -1, 1, 2, 2, 1, -1, -2}; int dy[NUM_WAYS] = {1, 2, 2, 1, -1, -2, -2, -1}; int ax[LONG]; int ay[LONG]; void print_board(board_t board) 회의내 { 용 int i, j; for (i=0; i<X_SIZE; i++) { for (j=0; j<Y_SIZE; j++) printf("%dt", board[i][j]); printf("n"); } } void Start(board_t board) { int i, j;
  • 8. for (i=0; i<X_SIZE; i++) for (j=0; j<Y_SIZE; j++) board[i][j] = -1; } int InBoard(int x, int y) { return x >= 0 && x < X_SIZE && y >= 0 && y < Y_SIZE; } int Access(board_t board, int x, int y) { return InBoard(x, y) && board[x][y] == -1; } int num_next_moves(board_t board, int x, int y) { int i, result=0; for (i=0; i<NUM_WAYS; i++) if (Access(board, x+dx[i], y+dy[i])) result++; return result; } int main() { int x, y, move=1, next,test; board_t board; Start(board); while (1) {
  • 9. printf("시작좌표를 입력하세요 "); scanf("%d %d", &x, &y); if (InBoard(x, y)) break printf("장기판을 벗어난 좌표입니다n"); } board[x][y] = 0; ax[0]=x; ay[0]=y; for(move=1; move < X_SIZE*Y_SIZE; move++) for(next=0;next<8;next++) { x = x + dx[next]; y = y + dy[next]; test=Access(board,x,y); if(test!=1) { x = x - dx[next]; y = y - dy[next]; } else { if(num_next_moves(board, x, y)==0) { x = x - dx[next]; y = y - dy[next]; } else
  • 10. { if(x==ax[move]&&y==ay[move]) { board[x][y] = -1; x = x - dx[next]; y = y - dy[next]; continue } board[x][y] = move; ax[move]=x; ay[move]=y; break } } }a for(move=0;move<90;move++) printf("%d,%d ",ax[move],ay[move]); printf("n"); print_board(board); } 문제점 스택 사용이 안되었고 장기판을 모두 채우지 못하고 프로그램이 종료된다. 아직 스택 구현을 제대로 하지못하고 있습니다. 더욱더 노력하여 스택 구현에 힘을 써야 반성 겠습니다. 결과 발표 프로그 #include <stdio.h> 램 /* definitions */ 소스 #define X_SIZE 10
  • 11. #define Y_SIZE 9 #define ways 8 #define LONG 90 typedef int board_t[X_SIZE][Y_SIZE]; int dx[ways] = {-2, -1, 1, 2, 2, 1, -1, -2}; int dy[ways] = {1, 2, 2, 1, -1, -2, -2, -1}; // Stack 선언부 int STX[LONG] = {0}; int STY[LONG] = {0}; int s_t=-1;//stack_top int s_way=0; void add_s(int x,int y) { STX[++s_t]=x; STY[s_t]=y; } int pop_x() { return STX[s_t]; } int pop_y() { return STY[s_t--]; }
  • 12. //출력 함수 선언부 void print_point(board_t board) { int u; for(u=0; u<90; u++) printf("(%d,%d) ",STX[u],STY[u]); } void print_board(board_t board) { int i, j; for (i=0; i<X_SIZE; i++) { for (j=0; j<Y_SIZE; j++) printf("%dt", board[i][j]); printf("n"); } } //조건 함수 선언부 void Start(board_t board)//배열 -1 로 초기화 { int i, j; for (i=0; i<X_SIZE; i++) for (j=0; j<Y_SIZE; j++) board[i][j] = -1;
  • 13. } int InBoard(int x, int y)//장기판 안에 있는지 판별 { return x >= 0 && x < X_SIZE && y >= 0 && y < Y_SIZE; } int Access(board_t board, int x, int y)//장기판 안에 있고 중복이동이 아닌지 판별 { return InBoard(x, y) && board[x][y] == -1; } int NextMoves(board_t board, int x, int y)//움직일수 있는 경로가 몇군대인지 result 값을 카운트 한다 { int i, result=0; for (i=0; i<ways; i++) if (Access(board, x+dx[i], y+dy[i])) result++; return result; } int new_move(board_t board, int x, int y); int MinNextWay(board_t board, int x, int y)//다음 움직일수있는 경우가 가장 작은곳으로 이동한다(단 이동경로가 0 이 아닌 경우) { int i, min = ways, result=0; for (i=0; i<ways; i++)
  • 14. if (Access(board, x+dx[i], y+dy[i]) && NextMoves(board, x+dx[i], y+dy[i]) < min) { min = NextMoves(board, x+dx[i], y+dy[i]); result = i; } return result; } void InPoint(board_t board, int x, int y) { int way; for (;s_t+1<X_SIZE*Y_SIZE;) { if (NextMoves(board, STX[s_t], STY[s_t]) == 0) { board[x][y] = -1; pop_x(); pop_y(); } way = MinNextWay(board, x, y); x = x + dx[way]; y = y + dy[way]; add_s(x,y); board[x][y] = s_t; }
  • 15. } int ssway[90]={0}; void Rway(board_t board, int x,int y)//x=stx, y=sty { printf("s_t?%dn",s_t); printf("ssway[s_t]?%dn",ssway[s_t+1]); if(s_t>=87)//스텍이 90 개 쌓이면 끝내기 { printf("쫑"); return; } else if(InBoard(x, y)&&NextMoves(board, x, y)>0) { printf("들왔? %dn",ssway[s_t+1]); x = STX[s_t] + dx[ssway[s_t+1]]; y = STY[s_t] + dy[ssway[s_t+1]]; if(Access(board, x, y))//이동한곳이 되는 자리면 ? { printf("들왔 A %dn",ssway[s_t+1]); add_s(x,y); board[STX[s_t]][STY[s_t]] = s_t; Rway(board,STX[s_t],STY[s_t]);//제귀 실행 } else if(ssway[s_t+1]>=7)//8 번째 경우까지 이동할곳이 없으면 팝
  • 16. { printf("빠꾸 2n"); board[STX[s_t]][STY[s_t]] = -1; ssway[s_t+1]=0; pop_x(); pop_y(); ssway[s_t+1]++;//팝한곳 다른길로 Rway(board,STX[s_t],STY[s_t]); } else { printf("빠꾸 1n"); ssway[s_t+1]++; printf("%dn",ssway[s_t+1]); Rway(board,STX[s_t],STY[s_t]); } } else { printf("빠꾸 3n"); board[STX[s_t]][STY[s_t]] = -1; ssway[s_t+1]=0; pop_x(); pop_y();
  • 17. ssway[s_t+1]++;//팝한곳 다른길로 Rway(board,STX[s_t],STY[s_t]); } } int main() { int x,y, way=0; board_t board; Start(board); while (1) { printf("시작좌표를 입력하시오 "); scanf("%d %d", &x, &y); fflush(stdin); if (InBoard(x, y)) break; printf("장기판 벗어난 좌표입니다n"); } add_s(x,y); board[STX[s_t]][STY[s_t]] = s_t; printf("%d,%d",STX[s_t],STY[s_t]); printf("%dn",board[STX[s_t]][STY[s_t]]); Rway(board, STX[s_t], STY[s_t]); //InPoint(board,STX[s_t],STY[s_t]); print_board(board);
  • 19. 최종 되돌아오는 퇴각 검색을 계속할 경우 프로그램 오버플로어 오류가 나므로 휴리스틱의 반성 법칙을 이용하여 문제를 해결하였 습니다.