본문 바로가기

[2016 - 2019] 학부 정리

(64)
[알고리즘-공부] 5.동적계획법(2) - 연속행렬곱셈 코드로는 이해가 잘 안간다. 책을 봐도 읽기 싫게 생겼다.. 그냥 문제를 풀면서 한번 생각해 보자 우선 책을 읽고 문제를 접하는게 이해하기 쉬울것 같다. 이 알고리즘은 결합법칙이 핵심인것 같다. 첫번째 문제 A1 (10 x 2), A2 (2 x 20), A3 (20 x 5), A4 (5 x 15) 1. 일단 행렬 (1,1) ,(2,2), (3,3), (4,4)에 모두 0을 집어 넣자 2. 첫번째 사선인 (1,2), (2,3), (3,4)의 행렬값을 채워 나가자 A1A2 = (10 x 2) x (2 x 20) = (10 x 20), A1A2의 값 : 10 x 2 x 20 = 400 A2A3 = (2 x 20) x (20 x 5) = (2 x 5), A2A3의 값 : 2 x 20 x 5 = 200 A3A4 ..
[알고리즘-공부] 3. 분할 정복 알고리즘(2) - 퀵정렬 3.2 퀵정렬(Quick Sort) 퀵정렬은 분할 정복 알고리즘으로 분류되나, 사실 알고리즘이 수행되는 과정을 살펴보면 정복 후 분할하는 알고리즘 이다. 퀵정렬 알고리즘은 문제를 2개의 부분문제로 분할하는데, 각 부분문제의 크기가 일정하지 않은 형태의 분할 정복 알고리즘이다. 퀵정렬은 다음과 같은 과정으로 분할 정복을 이용해 정렬을 수행합니다. (1) 데이터 집합 내에서 임의의 기준요소(pivot)를 선택하고, 기준요소보다 작은 요소들은 순서에 관계없이 무조건 기준요소의 왼편에, 큰 값은 오른편에 위치시킨다. (2) 기준 요소 왼편에는 기준 요소보다 작은 요소들이 모여 있고 오른편에는 큰 요소들이 모여 있겠쥬??이렇게 나눈 집합들을 다시 (1)번에서와 같이 임의의 기준요소를 선택하고 같은 방법으로 데이터..
[알고리즘-공부] 3. 분할 정복 알고리즘(1) - 합병정렬 분할 정복(Divide-and-Conquer) 알고리즘 이란 주어진 문제의 입력을 분할하여 문제를 해결(정복)하는 방식의 알고리즘이다. 여기서 분할된 입력에 대한 문제를 부분문제라고 하고, 부분문제의 해를 부분해라고 한다. 부분문제는 더 이상 분할 할 수 없을 때까지 계속 분할한다. 입력의 크기가 n일때, 총 몇번을 분할하여야 더 이상 분할할 수 없는 크기인 1이 될까? 분할 한 총 횟수 = k로 두고, 1번 분할 후 각각의 입력 크기 = 라고 한다면 입력크기는 씩 분할됨을 알 수 있다. 따라서 이라는 식을 세울 수 있고, 결국 분할 총 횟수 임을 알 수 있다. 분할 정복 알고리즘은 분할, 정복, 결합의 과정을 거친다. 분할 정복 알고리즘에서 가장 중요한 것은 '문제를 나누는 것'이다. 문제를 제대로 나..
[알고리즘-공부] 1.알고리즘의 첫걸음(2) 1.3 동전 거스름돈 : 그리디(Greedy) 알고리즘 -> 4장에서 설명! 동전 거스름돈 문제를 해결하는 알고리즘은 남은 거스름돈 액수를 넘지 않는 한도에서 가장 큰 액면의 동전을 계속하여 선택하는 것이다. 1.4 한붓그리기 : 오일러 서킷(Euler Circuit) 알고리즘의 핵심은 현재 점에서 다음으로 이동 가능한 점을 선택할 때에는 반드시 현재 점으로 돌아오는 사이클이 존재하여야 한다는 것이다. (한 점을 여러번 방문 할 수 있다.) 한붓그리기?? 한붓그리기는 연결되어 있는 선이 홀수개인 점이 아예 없거나 두 개만 있는 도형 위에서만 가능하다. 1.5 미로 찾기 : 오른손 법칙 현 위치에서 한 방향을 선택하고, 벽에 오른손을 댄다. 그리고 출구가 나올 때까지 계속 오른손을 벽에서 떼지 않고 걸어간..
[알고리즘-공부] 1. 알고리즘의 첫걸음(1) - 순차탐색, 이진탐색 1.1 최대 숫자 찾기 : 순차탐색 가장 큰 숫자가 적힌 카드를 찾는 한 가지 방법은 카드의 숫자를 하나씩 비교하면서 본 숫자들 중에서 가장 큰 숫자를 기억해가며 진행하는 방법이다. 마지막 카드의 숫자를 본 후에, 머릿속에 기억된 가장 큰 숫자가 적힌 카드를 바닥에서 집어든다. 순차탐색 : 카드를 한 장씩 차례대로 읽어가며 찾는 방법 ex) 17, 92, 18, 33, 58, 7, 33, 42 중 최댓값을 찾기 코드로 생각해보자 #최댓값 구하기 #입력 : 숫자가 n개 들어 있는 리스트 #출력 : 숫자 n개 중 최댓값 def find_max(arr): n = len(arr) #입력크기 n max_arr = arr[0] #리스트의 첫 번째 값을 최댓값으로 기억 for i in range(1,n): #1부터 ..
[알고리즘 - 공부] 0. 파이썬 설치 알고리즘들을 파이썬으로 짜보려 합니다. (교수님....ㅠ) 파이썬 설치부터 해보죠. 방법은 초초 간단 합니다. (1) http://python.org/download 에서 파이썬 내려받기 페이지가 열리면 Download Python 3.6.0 버튼을 누름 (2) 페이지 아래에 프로그램의 안정성에 대한 경고와 실행 여부를 묻는 창이 뜨면 실행 버튼을 누름 (3) 내려받기를 마치면 파이썬 설치 마법사가 실행됨 Install Now를 눌러 설치를 시작 (4) 사용자 계정 컨트롤 창에 보안 경고가 뜨면 예 버튼을 누름 (5) 프로그램이 모두 설치되면 설치 마법사 창에 Setup was successful이 나타남 Close 버튼을 눌러 마법사 창을 닫음 ----설치끝 (6) 윈도 10의 왼쪽 아래에 있는 ‘ W..
[알고리즘-BoJ] 2750번 깃허브에 올렸던 것들입니다. 이외에도 10문제 정도 풀었지만 너무 쉬웠던 것들이라서 간지나는 문제들을 풀게되면 올릴게요! 제발 하루에 하나씩이라도 열심히 풀면 좋겠다..ㅠ
[알고리즘-BoJ] 2747번 밑에 방법은 시간초과가 떴었음