SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
project #2



    말의 여행


                   자료구조


                     조장:
                     조원:
             20113318 정예린
순서
                            •조원별 업무분담
                                  •일정 계획
                                       -회의록
                                  •문제 파악
-infix expression을 postfix expression으로 바꾸는 방법
                   -스택(stack)과 큐(queue)의 개념
                              •알고리즘 계획
                       •알고리즘 토의, 보완
                                    •소스구현
                •문제점 파악 / 해결법 토의
                                    •최종소스
                  •시간 복잡도/공간 복잡도
1)조원별 업무 분담



2)일정계획
03.27~03.29
0329~04.03
04.03~04.05
04.05~04.10



3)문제파악
말의 여행
스텍
큐
백트레킹
헤밀턴의 순환
헤밀턴의 경로
기사의 여행
등의 자료 첨부
4)알고리즘 계획
초안
말의 여행 알고리즘
1. 처음 초기위치는 모두 0으로 초기화 시켜준다.
2. 처음 위치에서 이동하면서 갈림길을 발견하면         0은 갈 수 있는 길...ㄱ.
                                   1은 갈 수 없는 길...ㄴ.
ㄱ.갈 수 있는 길은 계속 진행한다.
ㄴ.갈 수 없는 길이므로 원래 자리로 돌아온다. → 백트래킹
※백트래킹
답이 될 수 있는 경우를 모두 가본 후에 답을 찾는 방법.
모든 경우의 수를 전부 따져보는 것.
검색 공간의 모든 가능한 배치 방법에 대해 어떤 작업을 반복하기 위한 조직적인 방법입다.
모든 가능성을 테스트하기 때문에 반드시 제대로 된 답이 나오게 되어있다.


3. 규칙을 기본으로 자리이동시의 좌표 값을 저장한다.→스택
※스택
LIFO : Last In First Out
같은 타입의 집합을 관리.
push : 자료를 집어넣는 행위.
pop : 자료를 빼 내는 행위.
push의 동작
-push로 데이터를 넣으며, push 함수에선 top을 1 증가시킴.
-top을 인자로 가지는 배열에 입력 data를 넣음.
-top과 할당된 스택의 크기를 비교하여 top이 스택의 마지막 요소보다 작을 때만 push.
-이 조건에 맞지 않으면 에러를 리턴.(오버플로우)
pop의 동작
-Top 위치의 값을 읽고 Top은 하나 감소.
-스택이 텅 비어서 더 꺼낼 데이터가 없을 때 -1이라는 에러 리턴.(언더플로우)
4. 출력 시는 스택으로 저장한 입력 값은 큐로 출력.
큐(Queue) 는 동적배열과 마찬가지로 상당히 구현이 쉬운 자료구조중 하나이다. 큐는 간단히
어떠 한 기억장소에 쓰고자 하는 데이타들을 차례로 기억 시킨 뒤, 그 데이타들을 입력 한 순
서대로 차례로 다시 읽어오는 기법이다.

즉, 큐는 FIFO(First In First Out)의 원리대로 동작하는 자료 구조인데, FIFO가 무슨뜻인가
하면, 먼저들어간 자료가 먼저나오고, 늦게들어간 자료가 늦게 나온다는 것이다.

필자는 맨처음 큐를 쇠파이프 라고 배웠다. 왜냐하면 쇠 파이프에 무언가를 넣고 쌓아두면 반
대쪽 구멍으로 그 무언가 들이 내가 넣은 순서대로 나올 수 밖에 없기 때문이다. 이렇게 해
두면 이해가 쉬울 것이다.

넣은 순서대로 자료를 꺼내가므로 순서대로 처리해야 하는 자료를 임시적으로 저장하는 용도
로 흔히 사용한다.

고속도로 톨게이트에 줄 서 있는 차들의 행렬이 큐의 대표적인 예인데 먼저 도착한 차가 먼저
빠져 나가고 늦게 도착한 차는 앞 차가 지나갈 때까지 기다려야 한다.

큐는 배열로 구현한 일자 큐( 선형 큐 라고 한다)와, 원형 큐 , 그리고 연결리스트로 구현 한
큐. 이렇게 크게 3가지로 나눌 수 있다. (연결리스트로 구현 한 큐는 이 장에선 다루지 않고,
연결리스트의 강의 후 따로 다룰것이다.)

그리고 큐 에서 쓰이는 용어로는 front(앞, 전방) 과, rear(뒤, 후방)이 있으며, 이 둘은 배열
의 데이타 들 중 다음으로 삭제될 위치와 다음으로 삽입될 위치를 가리키는 역활을 하며, 당
연히 포인터로 구현 할 수 있겠지만, 배열을 이용한 큐 에서는 간단히 정수형변수로도 구현이
가능하다.

ex) front = 7 -> 배열[7] -> 8번째 방에서 다음으로 삭제된다.
보통 front는 자료들 중 맨 앞을, rear는 맨 뒤 자료의 다음칸을 가리킨다.

또다른 용어로 삽입을 put, 출력(빼내기)을 get 이라 한며, init 를 초기화(시작 전 셋팅정도)
로 정의한다. (init는 큐 뿐만 아니라 스택외 다른 자료구조에서도 시작전 셋팅정도의 초기화
의 의미로 쓰인다.)


------참고로 사람마다 front 와 rear를 head(머리)와 tail(꼬리)로, put과 get을 insert(삽
입)과 delete(삭제)로 부르기도 한다.-----------
용어들은 아래를 참고하면 충분히 이해를 할 수 있을 것이다.

당연히 선형 큐가 구현하기 가장 쉬운 듯 보이므로, 선형 큐 부터 보도록 하자.



1. 선형 큐


선형 큐는 구현이 가장 쉽다. 동작 원리로는 아래의 그림과 같다.


-----------------------------------------------------------------------------
-------------------------
f,r
[ ][ ][ ][ ][ ] (배열을 초기화 했다. - 비어있다 (front와 rear가 선두인 0을 가리킨다.)
     ↓
 f      r
[ 1 ][ 2 ][ ][ ][ ] (1과 2를 삽입했다 (1과 2를 put 했다))
     ↓
     f   r
[ ][ 2 ][ ][ ][ ] (1을 삭제했다(빼내서 사용했다) (1을 get했다))
     ↓
     f        r
[ ][ 2 ][ 3 ][ 4 ][ ]  (3, 4를 삽입했다 (3, 4 put))
     ↓
         f     r
[ ][ ][ ][ 4 ][ ]  (2, 3을 삭제했다 (빼내서 사용했다) (2, 3 get))
     ↓
         f       r
[ ][ ][ ][ 4 ][ 5 ]  (5를 삽입했다 (5 put))
-----------------------------------------------------------------------------
-------------------------

보다시피 삽입을 할 때에는 r이 한칸씩 오른쪽으로, 삭제를 할 때에는 f가 한칸씩 오른쪽으로
간다는 걸 알 수 있다. 이렇게 계속 삽입, 삭제를 반복하다보면 금새 배열의 뒤쪽 공간이 부
족해 진다는 걸 알 수 있다. 위 그림에선 5가 삽입 된 후 rear 가 배열의 경계를 넘어서며,
다음 삽입 동작을 할 수 없게 된다. 배열의 크기만큼 자료가 들어 있지도 않은데 기억 공간이
부족해진 것이다.

큐의 자료는 빈번하게 삽입, 삭제되므로 배열 크기를 늘리는 것으로는 이 문제를 근본적으로
해결할 수 없다.

하지만 rear가 경계를 넘어서면 4, 5 를 복사하여 앞으로 보내도록 구현하면

[ 4 ][ 5 ][ ][ ][ ] 로 다시 나타 낼 수 있는데, 큐가 찰 때마다 이런 식으로 매번 복사를 한다
면 느리고 비효율적이다.

그래서 이 방법 대신 포인터가 배열의 끝에 닿았을 때 앞쪽으로 보내어 배열을 원형
(Circular)으로 연결하는 방법을 많이 사용하는데 이는 % 연산자로 간단하게 구현할 수 있다.



2. 원형 큐


원형큐의 front와 rear는 원형의 큐를 빙글 빙글 돌아가면서 자료를 삽입하고 삭제한다.




                        Exif information loading...


                                그림과 같다.

init_queue 는 큐를 초기화 하며(시작시 셋팅의 의미가 있다),
clear_queue 도 큐를 초기화 한다(사용 도중 데이타를 초기화 하는 의미가 있다).
오버플로우(overflow)는 큐가 꽉 찬 상태에서 더 입력을 하려 했을 경우 나오며, 언더플로우
(underflow)는 큐가 비어있는 상태에서 더 출력을 하려 했을 경우에 나온다.
큐가 꽉 찬 상태는 그림과 같다.
Exif information loading...


그림처럼 (rear+1)%갯수 == front 일 때 큐가 꽉 찬 상태이며, front == rear 일 때 비어있
는 큐가 된다. (맨 처음엔 front == rear == 0 이다)
head가 tail과 같은 상태는 큐가 빈 상태와 같으므로 두 포인터의 값만 비교해서는 큐의 정확
한 상태를 알 수 없다.
그래서 head 바로 앞의 한 칸은 미사용으로 남겨 두어 tail이 head의 바로 앞쪽에 있을 때,
즉 tail이 head-1일 때를 큐가 가득찬 것으로 정의한다.

이렇게 하면 기억 장소 하나를 쓰지 못하는 약간의 낭비가 발생하기는 하지만 상태를 정확하
게 판별할 수 있다.
-----------------------------------------------------------------------------
-------------------------


하지만, 배열로 큐를 구현하는 것에는 한계가 있으며, 상당히 불편하다. 이유인 즉, 배열의 크
기보다 더 많은 데이타가 삽입되면 큐가 가득차게 되어 쓸 수 없다는 점. (오버플로우 라 한
다)인데, 이를 고치기 위해 최대크기를 충분히 할당 한다해도, 무한히 커지지는 않기 때문에
언제든지 부족한 상황이 나올 수 있다.

물론 동적 배열을 쓸 수도 있겠지만 여러 가지 상황으로 볼 때 어울리지 않는다.

또한 배열은 연속적인 메모리 공간을 차지하는 직선적인 구조를 가지기 때문에 최대 크기만큼
충분한 용량을 확보했더라도 삽입점이 금방 배열 끝에 이르게 된다.

그래서 처음과 끝을 인위적으로 연결하여 원형으로 만들어 직선의 기억 공간을 재사용해야 하
는 불편함이 있다. 뿐만 아니라 원형 구조이다 보니 가득찬 경우와 빈 경우가 잘 구분되지 않
아 한칸을 버리거나 별도의 플래그를 도입하는 기법도 동원되어야 한다.

이러한 이유들 때문에 연결리스트로 구현한 큐를 선보이는데, 이는 이러한 불편함을 해결 할
수 있다.

연결리스트로 구현 한 큐는 차후 연결리스트를 배운 후 또 다시 공부 해 보도록 하자.




말의 여행의 기본조건은 헤밀턴의 순환(헤밀턴의 경로), 기사의 여행 규칙을 기본으로 한다.

최종 알고리즘
이 부분은 차교수님이 힌트 주신부분 넣기!
5)알고리즘 토의 및 보완
최종 알고리즘
이 부분은 차교수님이 힌트 주신부분 넣기!
6)소스 구현
초안 및 구현 과정
코딩 해보면서 중간 중간 자료 첨부
7)문제점 파악/해결법 토의
최종소스 전에 문제점 파악하기 및 해결법


8)최종소스
9)시간복잡도/공간복잡도

Mais conteúdo relacionado

Semelhante a 2012 Ds 02

Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서KimChangHoen
 
02. binary search tree
02. binary search tree02. binary search tree
02. binary search tree승혁 조
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl승혁 조
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
Binary search tree
Binary search treeBinary search tree
Binary search treeMelon Lemon
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디대영 노
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summaryHoChul Shin
 
Algorithms summary korean
Algorithms summary koreanAlgorithms summary korean
Algorithms summary koreanYoung-Min kang
 
amugona study 2nd
amugona study 2ndamugona study 2nd
amugona study 2ndwho7117
 
Stl vector, list, map
Stl vector, list, mapStl vector, list, map
Stl vector, list, mapNam Hyeonuk
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차Moonki Choi
 
Binary Search
Binary SearchBinary Search
Binary Searchskku_npc
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - QueueBill Kim
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdfkd19h
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02chl132435
 

Semelhante a 2012 Ds 02 (20)

Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서
 
자료구조02
자료구조02자료구조02
자료구조02
 
02. binary search tree
02. binary search tree02. binary search tree
02. binary search tree
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
Binary search tree
Binary search treeBinary search tree
Binary search tree
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
Algorithms summary korean
Algorithms summary koreanAlgorithms summary korean
Algorithms summary korean
 
amugona study 2nd
amugona study 2ndamugona study 2nd
amugona study 2nd
 
Stl vector, list, map
Stl vector, list, mapStl vector, list, map
Stl vector, list, map
 
2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차2021 1학기 정기 세미나 6주차
2021 1학기 정기 세미나 6주차
 
Binary Search
Binary SearchBinary Search
Binary Search
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - Queue
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
자구2번
자구2번자구2번
자구2번
 

Mais de Jungyerin

Mais de Jungyerin (8)

2012 Ds 06
2012 Ds 062012 Ds 06
2012 Ds 06
 
2012 Ds 05
2012 Ds 052012 Ds 05
2012 Ds 05
 
2012 Ds 04
2012 Ds 042012 Ds 04
2012 Ds 04
 
2012 Ds 03
2012 Ds 032012 Ds 03
2012 Ds 03
 
2012 Dm 07
2012 Dm 072012 Dm 07
2012 Dm 07
 
2012 Dm 04
2012 Dm 042012 Dm 04
2012 Dm 04
 
2012 Dm 02
2012 Dm 022012 Dm 02
2012 Dm 02
 
2012 Dm 01
2012 Dm 012012 Dm 01
2012 Dm 01
 

2012 Ds 02

  • 1. project #2 말의 여행 자료구조 조장: 조원: 20113318 정예린
  • 2. 순서 •조원별 업무분담 •일정 계획 -회의록 •문제 파악 -infix expression을 postfix expression으로 바꾸는 방법 -스택(stack)과 큐(queue)의 개념 •알고리즘 계획 •알고리즘 토의, 보완 •소스구현 •문제점 파악 / 해결법 토의 •최종소스 •시간 복잡도/공간 복잡도
  • 3. 1)조원별 업무 분담 2)일정계획 03.27~03.29 0329~04.03 04.03~04.05 04.05~04.10 3)문제파악 말의 여행 스텍 큐 백트레킹 헤밀턴의 순환 헤밀턴의 경로 기사의 여행 등의 자료 첨부 4)알고리즘 계획
  • 4. 초안 말의 여행 알고리즘 1. 처음 초기위치는 모두 0으로 초기화 시켜준다. 2. 처음 위치에서 이동하면서 갈림길을 발견하면 0은 갈 수 있는 길...ㄱ. 1은 갈 수 없는 길...ㄴ. ㄱ.갈 수 있는 길은 계속 진행한다. ㄴ.갈 수 없는 길이므로 원래 자리로 돌아온다. → 백트래킹 ※백트래킹 답이 될 수 있는 경우를 모두 가본 후에 답을 찾는 방법. 모든 경우의 수를 전부 따져보는 것. 검색 공간의 모든 가능한 배치 방법에 대해 어떤 작업을 반복하기 위한 조직적인 방법입다. 모든 가능성을 테스트하기 때문에 반드시 제대로 된 답이 나오게 되어있다. 3. 규칙을 기본으로 자리이동시의 좌표 값을 저장한다.→스택 ※스택 LIFO : Last In First Out 같은 타입의 집합을 관리. push : 자료를 집어넣는 행위. pop : 자료를 빼 내는 행위. push의 동작 -push로 데이터를 넣으며, push 함수에선 top을 1 증가시킴. -top을 인자로 가지는 배열에 입력 data를 넣음. -top과 할당된 스택의 크기를 비교하여 top이 스택의 마지막 요소보다 작을 때만 push. -이 조건에 맞지 않으면 에러를 리턴.(오버플로우) pop의 동작 -Top 위치의 값을 읽고 Top은 하나 감소. -스택이 텅 비어서 더 꺼낼 데이터가 없을 때 -1이라는 에러 리턴.(언더플로우) 4. 출력 시는 스택으로 저장한 입력 값은 큐로 출력. 큐(Queue) 는 동적배열과 마찬가지로 상당히 구현이 쉬운 자료구조중 하나이다. 큐는 간단히 어떠 한 기억장소에 쓰고자 하는 데이타들을 차례로 기억 시킨 뒤, 그 데이타들을 입력 한 순 서대로 차례로 다시 읽어오는 기법이다. 즉, 큐는 FIFO(First In First Out)의 원리대로 동작하는 자료 구조인데, FIFO가 무슨뜻인가 하면, 먼저들어간 자료가 먼저나오고, 늦게들어간 자료가 늦게 나온다는 것이다. 필자는 맨처음 큐를 쇠파이프 라고 배웠다. 왜냐하면 쇠 파이프에 무언가를 넣고 쌓아두면 반 대쪽 구멍으로 그 무언가 들이 내가 넣은 순서대로 나올 수 밖에 없기 때문이다. 이렇게 해 두면 이해가 쉬울 것이다. 넣은 순서대로 자료를 꺼내가므로 순서대로 처리해야 하는 자료를 임시적으로 저장하는 용도
  • 5. 로 흔히 사용한다. 고속도로 톨게이트에 줄 서 있는 차들의 행렬이 큐의 대표적인 예인데 먼저 도착한 차가 먼저 빠져 나가고 늦게 도착한 차는 앞 차가 지나갈 때까지 기다려야 한다. 큐는 배열로 구현한 일자 큐( 선형 큐 라고 한다)와, 원형 큐 , 그리고 연결리스트로 구현 한 큐. 이렇게 크게 3가지로 나눌 수 있다. (연결리스트로 구현 한 큐는 이 장에선 다루지 않고, 연결리스트의 강의 후 따로 다룰것이다.) 그리고 큐 에서 쓰이는 용어로는 front(앞, 전방) 과, rear(뒤, 후방)이 있으며, 이 둘은 배열 의 데이타 들 중 다음으로 삭제될 위치와 다음으로 삽입될 위치를 가리키는 역활을 하며, 당 연히 포인터로 구현 할 수 있겠지만, 배열을 이용한 큐 에서는 간단히 정수형변수로도 구현이 가능하다. ex) front = 7 -> 배열[7] -> 8번째 방에서 다음으로 삭제된다. 보통 front는 자료들 중 맨 앞을, rear는 맨 뒤 자료의 다음칸을 가리킨다. 또다른 용어로 삽입을 put, 출력(빼내기)을 get 이라 한며, init 를 초기화(시작 전 셋팅정도) 로 정의한다. (init는 큐 뿐만 아니라 스택외 다른 자료구조에서도 시작전 셋팅정도의 초기화 의 의미로 쓰인다.) ------참고로 사람마다 front 와 rear를 head(머리)와 tail(꼬리)로, put과 get을 insert(삽 입)과 delete(삭제)로 부르기도 한다.----------- 용어들은 아래를 참고하면 충분히 이해를 할 수 있을 것이다. 당연히 선형 큐가 구현하기 가장 쉬운 듯 보이므로, 선형 큐 부터 보도록 하자. 1. 선형 큐 선형 큐는 구현이 가장 쉽다. 동작 원리로는 아래의 그림과 같다. ----------------------------------------------------------------------------- ------------------------- f,r [ ][ ][ ][ ][ ] (배열을 초기화 했다. - 비어있다 (front와 rear가 선두인 0을 가리킨다.)      ↓  f      r [ 1 ][ 2 ][ ][ ][ ] (1과 2를 삽입했다 (1과 2를 put 했다))      ↓      f   r [ ][ 2 ][ ][ ][ ] (1을 삭제했다(빼내서 사용했다) (1을 get했다))      ↓      f        r [ ][ 2 ][ 3 ][ 4 ][ ]  (3, 4를 삽입했다 (3, 4 put))
  • 6.      ↓          f     r [ ][ ][ ][ 4 ][ ]  (2, 3을 삭제했다 (빼내서 사용했다) (2, 3 get))      ↓          f       r [ ][ ][ ][ 4 ][ 5 ]  (5를 삽입했다 (5 put)) ----------------------------------------------------------------------------- ------------------------- 보다시피 삽입을 할 때에는 r이 한칸씩 오른쪽으로, 삭제를 할 때에는 f가 한칸씩 오른쪽으로 간다는 걸 알 수 있다. 이렇게 계속 삽입, 삭제를 반복하다보면 금새 배열의 뒤쪽 공간이 부 족해 진다는 걸 알 수 있다. 위 그림에선 5가 삽입 된 후 rear 가 배열의 경계를 넘어서며, 다음 삽입 동작을 할 수 없게 된다. 배열의 크기만큼 자료가 들어 있지도 않은데 기억 공간이 부족해진 것이다. 큐의 자료는 빈번하게 삽입, 삭제되므로 배열 크기를 늘리는 것으로는 이 문제를 근본적으로 해결할 수 없다. 하지만 rear가 경계를 넘어서면 4, 5 를 복사하여 앞으로 보내도록 구현하면 [ 4 ][ 5 ][ ][ ][ ] 로 다시 나타 낼 수 있는데, 큐가 찰 때마다 이런 식으로 매번 복사를 한다 면 느리고 비효율적이다. 그래서 이 방법 대신 포인터가 배열의 끝에 닿았을 때 앞쪽으로 보내어 배열을 원형 (Circular)으로 연결하는 방법을 많이 사용하는데 이는 % 연산자로 간단하게 구현할 수 있다. 2. 원형 큐 원형큐의 front와 rear는 원형의 큐를 빙글 빙글 돌아가면서 자료를 삽입하고 삭제한다. Exif information loading... 그림과 같다. init_queue 는 큐를 초기화 하며(시작시 셋팅의 의미가 있다), clear_queue 도 큐를 초기화 한다(사용 도중 데이타를 초기화 하는 의미가 있다). 오버플로우(overflow)는 큐가 꽉 찬 상태에서 더 입력을 하려 했을 경우 나오며, 언더플로우 (underflow)는 큐가 비어있는 상태에서 더 출력을 하려 했을 경우에 나온다.
  • 7. 큐가 꽉 찬 상태는 그림과 같다. Exif information loading... 그림처럼 (rear+1)%갯수 == front 일 때 큐가 꽉 찬 상태이며, front == rear 일 때 비어있 는 큐가 된다. (맨 처음엔 front == rear == 0 이다) head가 tail과 같은 상태는 큐가 빈 상태와 같으므로 두 포인터의 값만 비교해서는 큐의 정확 한 상태를 알 수 없다. 그래서 head 바로 앞의 한 칸은 미사용으로 남겨 두어 tail이 head의 바로 앞쪽에 있을 때, 즉 tail이 head-1일 때를 큐가 가득찬 것으로 정의한다. 이렇게 하면 기억 장소 하나를 쓰지 못하는 약간의 낭비가 발생하기는 하지만 상태를 정확하 게 판별할 수 있다. ----------------------------------------------------------------------------- ------------------------- 하지만, 배열로 큐를 구현하는 것에는 한계가 있으며, 상당히 불편하다. 이유인 즉, 배열의 크 기보다 더 많은 데이타가 삽입되면 큐가 가득차게 되어 쓸 수 없다는 점. (오버플로우 라 한 다)인데, 이를 고치기 위해 최대크기를 충분히 할당 한다해도, 무한히 커지지는 않기 때문에 언제든지 부족한 상황이 나올 수 있다. 물론 동적 배열을 쓸 수도 있겠지만 여러 가지 상황으로 볼 때 어울리지 않는다. 또한 배열은 연속적인 메모리 공간을 차지하는 직선적인 구조를 가지기 때문에 최대 크기만큼 충분한 용량을 확보했더라도 삽입점이 금방 배열 끝에 이르게 된다. 그래서 처음과 끝을 인위적으로 연결하여 원형으로 만들어 직선의 기억 공간을 재사용해야 하 는 불편함이 있다. 뿐만 아니라 원형 구조이다 보니 가득찬 경우와 빈 경우가 잘 구분되지 않 아 한칸을 버리거나 별도의 플래그를 도입하는 기법도 동원되어야 한다. 이러한 이유들 때문에 연결리스트로 구현한 큐를 선보이는데, 이는 이러한 불편함을 해결 할 수 있다. 연결리스트로 구현 한 큐는 차후 연결리스트를 배운 후 또 다시 공부 해 보도록 하자. 말의 여행의 기본조건은 헤밀턴의 순환(헤밀턴의 경로), 기사의 여행 규칙을 기본으로 한다. 최종 알고리즘 이 부분은 차교수님이 힌트 주신부분 넣기! 5)알고리즘 토의 및 보완 최종 알고리즘
  • 8. 이 부분은 차교수님이 힌트 주신부분 넣기! 6)소스 구현 초안 및 구현 과정 코딩 해보면서 중간 중간 자료 첨부 7)문제점 파악/해결법 토의 최종소스 전에 문제점 파악하기 및 해결법 8)최종소스 9)시간복잡도/공간복잡도