CS/알고리즘_[교재]이것이 취업을 위한 코딩테스트다 8

[PART2]CH.09_최단 경로

- 다익스트라 최단 경로 알고리즘 다익스트라(Dijkstra) 최단 경로 알고리즘은 그래프에서 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘이다. 다익스트라 최단 경로 알고리즘은 '음의 간선'이 없을 때 정상적으로 동작한다. 다익스트라 최단 경로 알고리즘은 기본적으로 그리디 알고리즘으로 분류된다. 매번 '가장 비용이 적은 노드'를 선택해서 임의의 과정을 반복하기 때문이다. 알고리즘의 원리를 간략히 설명하면 다음과 같다. 출발 노드를 설정한다. 최단 거리 테이블을 초기화한다. 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택한다. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단 거리 테이블을 갱신한다. 위 과정에서 3, 4..

[PART2]CH.08_다이나믹 프로그래밍

- 다이나믹 프로그래밍 컴퓨터는 연산 속도에 한계가 있고, 메모리 공간을 사용할 수 있는 데이터의 개수도 한정적이라는 점이 많은 제약을 발생시킨다. 그래서 우리는 연산 속도와 메모리 공간을 최대한으로 활용할 수 있는 효율적인 알고리즘을 작성해야 한다. 다만, 어떤 문제는 메모리 공간을 약간 더 사용하면 연산 속도를 비약적으로 증가시킬 수 있는 방법이 있다. 대표적인 방법이 바로 다이나믹 프로그래밍(Dynamic Programming) 기법으로 동적 계획법이라고 표현하기도 한다. 피보나치 수열의 점화식을 재귀 함수를 사용해 만들 수는 있지만, 단순히 매번 계산하도록 하면 문제를 효율적으로 해결할 수 없다. 이러한 문제는 다이나믹 프록래밍을 사용하면 효율적으로 해결할 수 있다. 다만 항상 다이나믹 프로그래밍..

[PART2]CH.07_이진탐색

- 순차탐색 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법이다. 보통 정렬되지 않은 리스트에서 데이터를 찾아야 할 때 사용한다. #코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import sys def sequential_search(n, target, arr): for i in range(n): if arr[i] == target: return i+1 return -1 if __name__ == "__main__": input = sys.stdin.readline print('생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요.') input_data = input().split() n..

[PART2]CH.06_정렬

1. 기준에 따라 데이터를 정렬 정렬이란 데이터를 특정한 기준에 따라서 순서대로 나열하는것을 말한다. 정렬 알고리즘으로 데이터를 정렬하면 이진 탐색이 가능해진다. 즉 정렬 알고리즘은 이진 탐색의 전처리 과정이다. - 선택정렬 선택정렬은 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그다음 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾸는 과정을 반복하는 정렬. 즉, 매번 '가장 작은 것을 선택' 한다. #코드 1 2 3 4 5 6 7 8 9 10 arr = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(arr)): min_idx = i # 가장 작은 원소의 인덱스 for j in range(i+1,len(arr)): if arr[min_idx] ..

[PART2] CH.05_DFS/BFS

1. 꼭 필요한 자료구조 기초 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다. 대표적인 탐색 알고리즘으로 DFS와 BFS를 꼽을 수 있다. 그런데 DFS와 BFS를 이해하기 위해서는 스택과 큐에 대한 이해가 전제되어야 하므로 사전 학습으로 스택과 큐, 재귀 함수를 먼저 알아보자. 자료구조란 '데이터를 표현하고 관리하고 처리하기 위한 구조'를 의미한다. 그중 스택과 큐는 자료구조의 기초 개념으로 다음의 두 핵심적인 함수로 구성된다. 삽입(push) : 데이터를 삽입한다. 삭제(pop) :데이터를 삭제한다. - 스택 : 후입선출(Last In Last Out : LIFO) 1 2 3 4 5 6 7 ..

[PART2]CH.04_구현

예제4-1 상하좌우 여행가 A는 N * N 크기의 정사각형 공간 위에 서있다. 이공간은 1 * 1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1, 1)이며 가장 오른 쪽 아래 좌표는 (N, N)에 해당한다. 여행가 A는 상, 하 ,좌 ,우 방향으로 이동할 수 있으며 시작좌표는 항상(1, 1)이다. 우리앞에는 여행가가 A가 이동할 계획서가 놓여있다. 계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L, R, U, D중 하나의 문자가 반복적으로 적혀 있다. 각 문자의 의미는 다음과 같다. L : 왼쪽으로 한 칸 이동 R : 오른쪽으로 한 칸 이동 U : 위로 한 칸 이동 D : 아래로 한 칸 이동 이때 여행가 A가 N × N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다 예를 들어 (1,..

[PART2] CH.03_그리디_1_당장 좋은 것만 선택하는 그리디

현재 상황에서 지금 당장 좋은 것만 고르는 방법 예제3-1 거스름돈 당신은 음식점의 계산을 도와주는 점원이다. 카운터에 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리 동전이 무한히 존재한다고 가정한다. 손님에게 거슬러 줘야 할 돈이 N원일 때 거슬러 줘야 할 동전의 최소 개수를 구하라. 단, 거슬러 줘야 할 돈 N은 항상 10의 배수이다. (n=1260일 때) #코드 1 2 3 4 5 6 7 8 9 10 n = 1260 count = 0 coin_types = [500, 100, 50, 10] for i in coin_types: count += n//i n %= i print(count) cs 예제3-2 큰 수의 법칙 '큰 수의 법칙'은 일반적으로 통계 분야에서 다루어지는 내용이지만 동빈..

목록 및 학습 계획

[학습 계획] 시작일 : 2021.06.08 ~ 학습 요일 : 매주_화, 목, 토 ===================== 2회 반복 ===================== PART02 : 주요 알고리즘 이론과 실전문제 - ch03 그리디 21.06.08 - ch04 구현 21.06.10 - ch05 DFS/BFS 21.06.14 - ch06 정렬 21.06.15 - ch07 이진 탐색 21.06.17 - ch08 다이나믹 프로그래밍 21.06.(19~20) - ch09 최단 경로 21.06.24 - ch10 그래프 이론 21.06.(26~27) ================================================= ===================== 2회 반복 ============..

반응형