Loading...
2022. 9. 10. 04:05

이진 탐색 정복기2 - 이진 탐색이란..-

1. 이진 탐색(binary search) 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘 데이터가 무작위일 때는 사용할 수 없지만, 이미 정렬되어 있다면 매우 빠르게 데이터를 찾을 수 있다는 특징이 있다 범위를 절반씩 좁혀가며 데이터를 탐색하는 특징이 있다 위치를 나타내는 변수 3개를 사용하는데 탐색하고자 하는 범위의 시작점, 끝점, 그리고 중간점이다. 찾으려는 데이터와 중간점 위치의 데이터를 반복적으로 비교하여 원하는 데이터를 찾는게 이진 탐색이다. 이미 10개의 정렬된 데이터에서 값이 4인 원소를 찾는 예시를 살펴보자 1) 먼저 시작점과 끝점을 확인하고 둘 사이에 중간점을 정한다 시작점은 0, 끝점은 9이고 중간점은 4.5인데 중간점이 실수면 소수점 이하를 버린다 그래서 중간점은 4..

2022. 9. 8. 03:36

이진 탐색 정복기1 -기본 이론 순차 탐색?-

리스트 내에서 데이터를 매우 빠르게 탐색하는 알고리즘에 대하여 1. 순차 탐색 가장 기본적인 탐색 방법 n개의 데이터가 있을 때, 데이터를 차례대로 하나씩 확인하여 어떠한 처리를 해준 그 자체가 바로 순차 탐색이다. 순차 탐색(sequential search)이란 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법 정렬되지 않은 리스트에서 데이터를 찾아야할때 리스트 내에 데이터가 아무리 많아도 시간만 충분하다면 항상 원하는 원소를 찾을 수 있다 2. 순차 탐색으로 'IU'를 찾는 과정 1) 먼저 첫번째 데이터 'Daehyuck'는 찾고자 하는 문자열 'IU'와는 다르다. 따라서 다음 데이터로 이동 2) 두번째 데이터 'Taeyeon'은 찾고자 하는 'IU'와는 ..

2022. 8. 31. 23:44

DFS 알고리즘 유형별 기본 틀 정리

1. 기본 스택 구현 방문배열 visited 초기화 첫 시작정점 v를 방문 처리 그 후 탐색 반복문 수행 v에 인접한 정점 w중에서 아직 방문하지 않은 w를 찾으면, 이미 방문한 v를 스택에 넣고 v를 w로 교체한 후에, w를 방문처리하고 바로 break 그 후 다시 w에 인접한 정점중에서 방문하지 않은 정점을 찾으면, w를 스택에 넣고 새로운 정점으로 교체한 뒤에 방문처리하고 반복 수행 더 이상 방문할 곳이 존재하지 않는다면 스택이 비어있는지 검사한다 스택이 비어있다면, 전체 탐색을 종료 스택이 비어있지 않다면, 하나씩 pop하여 다시 인접한 정점중에서 방문하지 않은 정점이 존재하는지 탐색 수행 visited = [0] * n def dfs(v,visited): visited[v] = 1 stack =..

BFS 알고리즘 유형별로 기본 틀 정리(기초, 미로찾기, 확산)

1. 가장 기본형태 방문배열 visited 생성 빈 큐에 방문 시작할 정점 v를 넣고 v에 대한 방문처리 큐가 빌때까지 반복문 - 큐에서 정점 v를 빼고 v에 대해 할일을 수행하면서 v에 인접한 정점 w중에 방문하지 않은 w라면 다시 큐에 넣고 w에 대해 방문처리 def bfs(v,N): #시작정점 v, 마지막 정점 N #visited 생성 visited = [0] * (N+1) #큐를 생성함 q = [] q.append(v) #시작점이 들어간 큐 ### q=[v] visited[v] = 1 while q: #큐가 비어있지 않다면 탐색 v = q.pop(0) #시작점 뽑아내기 #방문한 v를 이용해 할일 print(v) #인접하고 미방문한 (in queue되지 않은) 정점 w가 있으면... for w in..

2022. 8. 25. 03:17

2차원 배열에서 한 행, 한 열 당 숫자 하나씩을 골랐을 때 최소 합으로 만드는 방법

1. 문제 N*N 배열에 숫자가 들어있는데, 각 행에서 하나씩 숫자를 골라 그들의 합이 최소가 되도록 만들고 싶다. 그런데 세로로 같은 줄에 2개 이상의 숫자를 고를 수는 없다. 어떻게하면 합이 최소가 되도록 숫자를 고를 수 있을까? 2. 나의 풀이 어떻게 풀어야할지 도저히 모르겠더라 그래서 천천히 pseudo code를 생각해보았다 2-1)한 행에 0부터 n-1까지에서 숫자를 하나 고른다 2-2)고른 숫자를 더해준다 2-3)행수에 1을 더해서 다음 행으로 이동한다 2-4)이전 행에 고른 열이 아닌 다른 열에서 숫자 하나를 고른다 2-5)고른 숫자를 재귀적으로 반복함 이런식으로 생각해보고 하나하나 천천히 짜보니까 길이 좀 보이긴 하더라 def pick_num(x,y,sum_value): sum_value..

2022. 7. 3. 01:25

DFS/BFS 완전정복을 위한 DFS/BFS 기본 이론

1. 그래프의 기본 구조 그래프는 노드(node)와 간선(edge)으로 표현되고 이때 노드를 정점(vertex)이라고도 말한다 그래프 탐색이란 하나의 노드를 시작으로 다수의 노드를 방문하는 것이다 두 노드가 간선으로 연결되어 있다면 '두 노드는 인접하다'(adjacent)라고 말한다 노드를 도시, 간선을 도로라고 생각해보자. A라는 도시(노드)에서 B라는 도시(노드)로 이동하기 위해서 A와 B를 연결하는 도로(간선)를 거친다고 이해하면 쉬울 것이다 2. 프로그래밍에서 그래프를 표현하는 방식 인접행렬(adjacency matrix) : 2차원 배열로 그래프의 연결 관계를 표현하는 방식 인접리스트(adjacency list) : 리스트로 그래프의 연결 관계를 표현하는 방식 인접행렬 방식은 2차원 배열에 각 ..