2. 9 세기 경 페르시아 수학자
알콰리즈미 (al-Khwarizmi)
최초의 알고리즘: BC 300년 경
유클리드의 최대공약수 알고리즘
알고리즘 유래
3. 알고리즘 정의
any well-defined computational procedure that
takes some value, or set of values as input and
produces some value, or a set of values as output.
a sequence of computational steps which allow to solve a
certain task
문제를 해결하기 위한 단계적인 절차
15. 뒤집힌 카드 중 최대 값 찾기
최대값 찾기 알고리즘
1. 카드의 숫자를 하나씩 확인하면서 최대 값을 기억해가는 방법
2. 마지막 카드를 확인하고 그 때 까지 기억한 최대 값과 비교하여
카드 중 최대 값을 찾기를 마침
순차 탐색
카드를 하나씩 차례대로 읽어 가며 찾는 방법
16. 임의의 숫자 찾기
임의로 나열된 숫자 중 찾기
1. 카드를 하나씩 확인하면서 찾으려는 숫자가 있는지 확인한다
순차 탐색
카드를 하나씩 확인하며 찾는 숫자를 확인하는 방법
39. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
40. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
41. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
42. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
43. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
44. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
45. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
46. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
47. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
48. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
49. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
50. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
51. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
52. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
53. 임의의 숫자 찾기
오름차순 정렬 숫자 중 찾기
(오름차순으로 정렬된 숫자들 중 찾기)
5 19 24 25 31 56 60 67 7534
67 찾기 (순차 탐색)
5 19 24 25 31 56 60 67 7534
67 찾기
5 19 24 25 31 56 60 67 7534
24 찾기
54. 임의의 숫자 찾기
알고리즘
(오름차순으로 정렬된 숫자들 중 찾기)
1. 중간 위치에 있는 카드의 숫자 값을 확인한 후 카드 값과 찾으려
는 숫자를 비교
2. (1)의 비교에서 찾는 숫자가 카드의 값보다 작으면 왼쪽의 카드
를 대상으로 (1)과 같은 방법으로 수행
3. (1)의 비교에서 찾는 숫자가 카드의 값보다 크면 오른쪽의 카드
를 대상으로 (1)과 같은 방법으로 수행
이진 탐색
카드를 두 영역으로 구분하여 한 영역에서만 탐색
56. 동전 거스름돈
동전 거스름돈
1. 거스름 돈 액수를 넘지 않는 가장 큰 금액의 동전을 선택
2. 거스름 돈 액수에서 선택한 동전의 액수를 감하고 (1) 을 다시 수행
Greedy 알고리즘
각 단계에 있어 가장 좋을 것이라 생각하는 것을 선택하는 방법
최적화 문제 해결 방법
810 원 = 500원 * 1 + 100원 *3 + 10원 * 1
57. 한 붓 그리기
제약 조건
그래프의 임의의 한점에서 출발하여 연필을 종이에서 띄지 않고
모든 선분은 한번만 지나서 출발점으로 돌아오는 문제
(단, 점은 여러 차례 방문해도 됨)
58. 한 붓 그리기
알고리즘
1. 시작점 1번에서 시작하여 선분을 따라 그려서 7번에 도착
2. 7번의 이웃 노드는 6번, 9번, 10번임. 10번으로 가면 이미 진단
선분이 있기 때문에 10번은 선택할 수 없음
3. 6번과 9번은 선택하여도 한 붓 그리기가 가능
특정 점에서 이웃 노드를 선택하여 특정 점으로 돌아오는 사이클이
존재하면 한 붓 그리기 가능
60. 미로 찾기
알고리즘
현 위치에서 방향을 선택하고 벽에 오른 손을 때고 출구가 나올 때 까지
오른손을 벽에서 떼지 않고 계속 걸어 나간다.
오른손 법칙 알고리즘
61. 1 개의 가짜 동전이 섞인 동전 더미에서 가짜 동전을 찾는 방법
가짜 동전은 진짜 동전 보다 무게가 약간 가볍다.
양팔 저울을 사용 횟수를 줄여서 가짜 동전을 찾는 문제
가짜 동전 찾기
제약 조건
62. 가짜 동전 찾기
알고리즘 1
1. 동전 더미에서 임의의 동전 한 개를 선택하여 기준 동전
기준 동전
2. 나머지 동전 더미에서 동전을 한 개씩 저울의 왼쪽에 올려 비교
비교 횟수 (저울 사용 횟수): 1 번 ~ (n-1) 번
n 개
63. 가짜 동전 찾기
알고리즘 2
1. 동전 더미를 두 개의 동전으로 쌍을 구성
2. 두 개의 동전 쌍을 저울을 이용하여 비교
비교 횟수 (저울 사용 횟수): 1 번 ~ n/2 번
64. 가짜 동전 찾기
알고리즘 3
이쪽에 가짜 동전
이 있다.
이쪽만 반씩 나누
어 …
1. 동전 더미를 반으로 나누어 저울의 양쪽에 올림
2. 가벼운 동전 더미의 동전들을 이용하여 (1) 번을 반복 함
Divide-and -Conquer (분할 정복)
1. 전체 문제를 크기가 작은 부분 문제로 분할
2. 부분 문제를 재귀적으로 해결하여 전체 문제를 해결
65. 가짜 동전 찾기
알고리즘 3 분석
동전의 개수: n 개
1번째 비교: n/2 개
2번째 비교: n/4 개
3번째 비교: n/8 개
4번째 비교: n/16 개
k번째 비교: n/2k개
동전의 개수가 n 개 일 때 비교 횟수: log2n
동전의 개수가 2배로 증가 하여도 비교 회수는 1 번 증가
66. 독이 든 술 단지 찾기
제약 조건
술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술
술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술
술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술
술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술 술
술 단지 중 한 개의 술 단지에 독이 들어 있음
독이 든 술 을 마시면 일 주일 후에 죽음
죽는 사람을 최소화 하면서 독이 든 술 단지를 찾는 문제
67. 독이 든 술 단지 찾기
2개의 술 단지 경우
귀납적 사고를 이용주요 아이디어
술 단지가 2개 일 경우
술 술
한 명 만 있으면 독이든 술 단지를 찾을 수 있음
일 주일 후 죽음 or 생존
죽음: 왼쪽 술 단지에 독
생존: 오른 술 단지에 독
68. 독이 든 술 단지 찾기
4개의 술 단지 경우
술 단지가 4개 일 경우
술 술 술 술
case 1:
case 2:
술 술 술 술
69. 독이 든 술 단지 찾기
4개의 술 단지 경우
술 단지가 4개 일 경우
술 술 술 술
일 주일 후 한 사람이 죽는 경우:
일주일 후 두 사람이 죽는 경우:
일주일 후 두 사람 모두 사는 경우:
죽은 사람이 마신 술 단지에 독
두사람이 함께 마신 술 단지에 독
나머지 술 단지에 독
70. 독이 든 술 단지 찾기
4개의 술 단지 경우
01 00 11 10
두 사람의 조합으로 만들 수 있는 경우의 수: 22 (4)
1) A, B 모두 마시지 않은 술독
(A) (B) (B) (A)
3) B 만 마신 술독 4) A, B 모두 마신 술독
2) A 만 마신 술독
술 단지가 4개 일 경우
71. 독이 든 술 단지 찾기
8개의 술 단지 경우
술 단지가 8개 일 경우
술 술 술 술 술 술 술 술
A만 마심 B만 마심 C만 마심A 마심
B 마심 C 마심 B 마심
A 마심
C 마심
A 마심 B 마심
C 마심
술 단지가 n 개인 경우 희생자 수: 0 ~ log2n
72. 알고리즘 공부할 수 있는 곳
https://www.acmicpc.net
https://www.topcoder.com/what-can-you-do/algorithms-analytics/