Kitel algorithm 2
Transcript of Kitel algorithm 2
OF KITELBY KITEL
FOR KITELS/W 능력 향상을 위한 Algorithm 세미나두 번째인생 위기
37th 김진오
목차• BFS //Breadth First
Search
• DFS //Depth First Search
• DP(?) //Dynamic Programming
Why BFS?
• 최단거리 탐색• 지역 탐색 - 호수• 알고리즘 공부 해봤어요 !
• 컴퓨터는 Searching Machine
Breadth First Search
• 한국말로 너비 우선 탐색• 점점 퍼져나가요 .
• Queueueueueueueueueueueueueueueueueue.. ㅠㅠ
Queue
• 간단한 자료구조 . (Stack Queue)
• FIFO(First In First Out)
• Push, Pop(Insert, Delete)
Queue
• 간단한 자료구조 . (Stack Queue)
• FIFO(First In First Out)
• Push, Pop(Insert, Delete)
PUSH
Queue
• 간단한 자료구조 . (Stack Queue)
• FIFO(First In First Out)
• Push, Pop(Insert, Delete)
PUSH
Queue
• 간단한 자료구조 . (Stack Queue)
• FIFO(First In First Out)
• Push, Pop(Insert, Delete)
PUSH
Queue
• 간단한 자료구조 . (Stack Queue)
• FIFO(First In First Out)
• Push, Pop(Insert, Delete)
Queue
• 간단한 자료구조 . (Stack Queue)
• FIFO(First In First Out)
• Push, Pop(Insert, Delete)
POP
Queue
• 간단한 자료구조 . (Stack Queue)
• FIFO(First In First Out)
• Push, Pop(Insert, Delete)
POP
Queue
• 간단한 자료구조 . (Stack Queue)
• FIFO(First In First Out)
• Push, Pop(Insert, Delete)
POP
BFS
• 시작 ..
• 내가 미쳤지 ..
• 내 마음은 호수요 ..
호수 찾기0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
0 == 땅1 == 물
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
42 PUSH
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
42
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기
xy
(1,1)
42
43 PUSH
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
43POP
42
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
43
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
43
33
44 PUSH
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
43
33
44
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
33
44POP
43
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
33
44
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
33
44
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
44POP
33
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
44
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
44 PUSH4
554
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
44
45
54
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
45
54POP
44
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
45
54
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
45
54
35
55 PUSH
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
45
54
35
55
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
35
55
54POP
45
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
54
35
55
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
54
35
55
64 PUSH
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
54
35
55
64
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
35
55
64POP
54
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
35
55
64
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
35
55
64 PUSH3
6
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
35
55
64
36
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
55
64
36POP
35
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
55
64
36
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
55
64
36 PUSH5
6
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
55
64
36
56
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
64
36
56POP
55
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
64
36
56
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
64
36
56
63 PUSH
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
64
36
56
63 PUSH
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
36
56
63POP
64
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
36
56
63
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
36
56
63 PUSH2
637
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
36
56
63
26
37
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
56
63
26
37POP
36
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
56
63
26
37
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
56
63
26
37
66 PUSH
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
56
63
26
37
66
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
63
26
37
66POP
56
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
63
26
37
66
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
63
26
37
66 PUSH6
2
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
63
26
37
66
62
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
26
37
66
62POP
63
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
26
37
66
62
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
37
66
62POP
26
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
37
66
62
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
66
62POP
37
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
66
62
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
66
62
76 PUSH
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
66
62
76
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
62
76POP
66
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
62
76
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
76POP
62
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy
76
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xyPOP
76
0 0 0 0 0 0 0
0 0 0 1 0 1 0
0 0 1 1 0 1 0
0 0 0 1 1 1 0
0 0 1 1 1 0 0
0 1 1 0 1 1 1
0 0 1 0 0 0 0
호수 찾기(1,1)
xy 끄으으으으으으으으ㅌ
Queue 구현#define QUEUESIZE 10000
int q[QUEUESIZE];int head, tail;
void Push(int parm){q[tail]=parm;tail++;tail%=QUEUESIZE;
}
주의 : 학교 과제에서 이렇게 구현하면 0 점 받아요 .알고리즘 문제를 풀 때 쓰는 방법 .
void Pop(){head++;head
%=QUEUESIZE;}
문제풀기 - 호수
• http://59.23.113.171/30stair/lake/lake.php?pname=lake
CODE
최단거리 찾기
입구
출구
최단거리 찾기
1입구
출구
최단거리 찾기
2
1 2입구
출구
최단거리 찾기
3
2
1 2 3입구
출구
최단거리 찾기4
3
2 4
1 2 3입구
출구
최단거리 찾기4 5
3 5
2 4 5
1 2 3입구
출구
최단거리 찾기6
4 5 6
3 5
2 4 5 6
1 2 3입구
출구
최단거리 찾기6
4 5 6
3 5 7
2 4 5 6
1 2 3입구
출구
최단거리 찾기6
4 5 6 8
3 5 7
2 4 5 6
1 2 3입구
출구
최단거리 찾기6 9
4 5 6 8
3 5 7
2 4 5 6
1 2 3입구
9 번
Why DFS?
• 경로 탐색• Graph
• 모든 경우의 수
Depth First Search
• 한국말로 깊이 우선 탐색• 깊숙이 들어가요• Stack ==> 재귀
• Vertex 끼리 edge 로 연결되어있는 구조• Node 와 Link
Graph
1 2
5
3
6
4
7
• 2 차원 배열을 사용하여 구현• 1 은 2, 5 와 연결되어있다 .
Graph1 2 3 4 5 6 7
1 1 1
2 1 1 1
3 1
4 1
5 1 1 1
6 1
7 1
• BFS 도 적용 가능• 그래프 특성상 DFS 가 더 편함
Graph1 2 3 4 5 6 7
1 1 1
2 1 1 1
3 1
4 1
5 1 1 1
6 1
7 1
Graph1 2 3 4 5 6 7
1 1 1
2 1 1 1
3 1
4 1
5 1 1 1
6 1
7 1
방문한 곳
Graph1 2 3 4 5 6 7
1 1 1
2 1 1 1
3 1
4 1
5 1 1 1
6 1
7 1
방문한 곳
Graph1 2 3 4 5 6 7
1 1 1
2 1 1 1
3 1
4 1
5 1 1 1
6 1
7 1
방문한 곳
Graph1 2 3 4 5 6 7
1 1 1
2 1 1 1
3 1
4 1
5 1 1 1
6 1
7 1
방문한 곳
Graph1 2 3 4 5 6 7
1 1 1
2 1 1 1
3 1
4 1
5 1 1 1
6 1
7 1
방문한 곳
Virus 문제
http://59.23.113.171/30stair/virus1/virus1.php?pname=virus1
1 2
5
3
6
4
7
Virus - Code
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1 10 9입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1 10 9입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1 10 9입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1 10 9입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1 10 9입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1 10 9입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1 10 9입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1 10 9입구
출구
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1 10 9입구
13 번
12
3
4
최단거리 찾기6 13
4 5 6 12
3 7 11
2 8 9 10
1입구
12
3
4
13 번
최단거리 찾기8 9
9 7 6 8
10 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
9 7 6 8
10 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
9 7 6 8
10 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
9 7 6 8
10 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
9 7 6 8
10 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
9 7 6 8
10 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
9 7 6 8
10 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
9 7 6 8
10 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
10 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
11 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
12
3
4
13 번
최단거리 찾기8 9
8 7 6 8
9 5 7
10 4 5 6
1 2 3입구
9 번
12
3
4
BFS, DFS 비교• 최단거리 탐색에서는 BFS 가 더 빠르다 .
==> 최단거리 탐색에서는 BFS
• DFS 는 모든 경우의 수를 다 탐색하기 때문에 ..!==> 모든 경우의 수를 다 따져봐야하면 DFS
Why Dynamic Programming?
• 실행 시간을 엄청나게 단축할 수 있다 .
• 알고리즘 대회는 DP 대회 !
• SW 역량평가에서 DP 로 풀면 거의 취업 확정 !
Dynamic Programming
• 한국어로 동적 계획법• 캐싱 (Caching)
• 이 전에 저장된 상태를 활용함 . => 메모리를 적극 활용한다 .
• 저장하는 상태는 항상 최적의 값 ! ( 내가 구해야하는 값 )
덩달이와 산신령
http://59.23.113.171/30stair/dungdal/dungdal.php?pname=dungdal
돈 많이 줍기
덩달이와 산신령 - 해설5 7 1
0 1 2 10
11 6
0번째 01번째 52번째 5
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 01 번째 52 번째 5
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 51 번째 52 번째 5
최대값 저장
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 51 번째 5 72 번째 5
첫 번째 줍는 것은 이 전에 줍지 않았다는 것 !
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 51 번째 5 72 번째 5 12
두 번째 줍는 것은 이 전에 한 번 주웠다는 것 !
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 5 12 17 17 19 29 381 번째 5 7 15 13 19 27 30 352 번째 5 12 17 16 15 29 38 36
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 5 12 17 17 19 29 381 번째 5 7 15 13 19 27 30 352 번째 5 12 17 16 15 29 38 36
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 5 12 17 17 19 29 381 번째 5 7 15 13 19 27 30 352 번째 5 12 17 16 15 29 38 36
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 5 12 17 17 19 29 381 번째 5 7 15 13 19 27 30 352 번째 5 12 17 16 15 29 38 36
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 5 12 17 17 19 29 381 번째 5 7 15 13 19 27 30 352 번째 5 12 17 16 15 29 38 36
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 5 12 17 17 19 29 381 번째 5 7 15 13 19 27 30 352 번째 5 12 17 16 15 29 38 36
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 5 12 17 17 19 29 381 번째 5 7 15 13 19 27 30 352 번째 5 12 17 16 15 29 38 36
덩달이와 산신령 - 해설
5 7 10 1 2 10 11 60 번째 0 5 12 17 17 19 29 381 번째 5 7 15 13 19 27 30 352 번째 5 12 17 16 15 29 38 36
SCV0 1 0 0 1
0 0 1 0 0
1 0 1 1 0
1 1 0 1 0
1 0 0 0 1
오른쪽과 아래로만 간다 .
SCV0 1 0 0 1
0 0 1 0 0
1 0 1 1 0
1 1 0 1 0
1 0 0 0 1
왼쪽과 위에서만 온다 !
SCV패 딩 패 딩 패 딩딩 0 1 0 0 1
패 0 0 1 0 0
딩 1 0 1 1 0
패 1 1 0 1 0
딩 1 0 0 0 1
왼쪽과 위에서만 온다 !
SCV0 0 0 0 0 0
0 0 1 0 0 1
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
왼쪽과 위에서만 온다 !
SCV0 0 0 0 0 0
0 0 1 0 0 1
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
왼쪽과 위에서만 온다 !
SCV0 0 0 0 0 0
0 0 1 0 0 1
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
왼쪽과 위에서만 온다 !
SCV0 0 0 0 0 0
0 0 1 1 0 1
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 0 1
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 1
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 1
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 0 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 1 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 0 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 1 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 1 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 0
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 1 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 1 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 0 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 1 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 0
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 1 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 0 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 3 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 3 0 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 3 3 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 3 3 0 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 3 3 5 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 3 3 5 1
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 3 3 5 6
큰 값만 가져온다
SCV0 0 0 0 0 0
0 0 1 1 1 2
0 0 1 2 2 2
0 1 1 3 4 4
0 2 3 3 5 5
0 3 3 3 5 6
큰 값만 가져온다
SCV - Code
• 앞에 저장된 값들만 필요• 입력을 받고 바로바로 처리