1. 순차 탐색 순차 탐색(Sequential Search)이란 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법이다. 데이터 정렬 여부와 상관없이 가장 앞에 있는 원소부터 하나씩 확인해야 하므로 데이터의 개수가 N개일 때, 최대 N번의 비교 연산이 필요하다. 따라서 최악의 경우 시간 복잡도는 O(N)이다. 2. 이진 탐색 (1) 이진 탐색 이진 탐색(Binary Search)은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘이다. 이진 탐색은 위치를 나타내는 변수 3개를 사용하는데, 탐색하고자 하는 범위의 시작점, 끝점, 중간점이다. 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는다. 예를 들면 0, 2..
정렬이란 데이터를 특정한 기준에 따라서 순서대로 나열하는 것을 말한다. 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬에 대해 학습하겠다. 1. 선택 정렬 선택 정렬(Selection Sort) 알고리즘이란 데이터가 무작위로 여러 개 있을 때, 이 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾸는 과정을 반복하는 것을 의미한다. 코드는 다음과 같다. array = [7, 5, 1, 3, 0, 4, 2, 6, 9, 8] #리스트 선언 for i in range(len(array)): min_index = i #가장 작은 원소의 인덱스 for j in range(i+1, len(array)): if array[min_index] >..
1. 자료구조 자료구조(Data Structure)란 데이터를 표현, 관리, 처리하기 위한 구조를 의미한다. 스택(Stack)은 박스 쌓기에 비유할 수 있다. 후입선출 구조이다. 따라서 기본 리스트에서 append()와 pop()을 이용하면 스택 자료구조와 동일하게 동작한다. 큐(Queue)는 대기줄에 비유할 수 있다. 선입선출 구조이다. 따라서 collections 모듈에 있는 deque 라이브러리를 활용하여 append()와 popleft()를 사용하여 동작할 수 있다 deque 객체를 리스트 자료형으로 변경하고자 한다면 list() 메서드를 이용하면 된다. 2. 재귀함수(Recursive Function) 재귀함수(Recursive Function)란 자기 자신을 다시 호출하는 함수를 의미한다. e..
구현(Implementation)이란 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다. 어떤 문제를 풀든 간에 소스코드 작성과정에서 구현은 필수이므로 모든 범위의 코딩테스트 문제유형을 포함하는 개념이다. 완전탐색이란 모든 경우의 수를 주저없이 다 계산하는 해결방법을 의미한다. 시뮬레이션은 문제에서 제시한 알고리즘을 한단계씩 차례대로 직접 수행해야 하는 문제유형을 의미한다. 예제1 상하좌우 - 시뮬레이션 Q 여행가 A는 N X N 크기의 정사각형 공간 위에 서 있다. 이 공간은 1X1크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위의 좌표는 (1,1)이며, 가장 오른쪽 아래의 좌표는 (N,N)에 해당한다. 여행가 A는 상,하,좌,우 방향으로 이동할 수 있으며, 시작좌표는 항상 (1,1)이다. 우리 앞에..