Algorithm/algorithm_study 11

개발형 코테

주로 클라이언트-서버간의 통신을 주고받는 형식으로 개발을 진행 클라이언트 서버 HTTP 개요 파이썬 웹 요청 예제 : GET 방식 import requests target = "http://google.com" response = requests.get(url=target) print(response.text) get방식으로 google에 접속하여 가져온 응답(response)를 text형식으로 출력하였다. 개발형 코딩 테스트의 핵심 키워드 : REST API, JSON REST의 등장 배경 REST 개요 REST API JSON JSON 객체 사용 예제 import json user = { "id": "minchul", "password": "1234", "age": 25, "hobby": ["codi..

Interval Sum

구간 합 구간 합 빠르게 계산하기 문제 해결 아이디어 동일한 반복된 계산을 수행하지 않고 DP처럼 메모이제이션 기법을 이용하는 것 * 소스 코드 # 데이터의 개수 N과 전체 데이터 선언 n = 5 data = [10, 20, 30, 40, 50] # 접두사 합(Prefix Sum) 배열 계산 sum_value = 0 prefix_sum = [0] for i in data: sum_value += i prefix_sum.append(sum_value) # 구간 합 계산 (세 번째 수부터 네 번째 수까지) left = 3 right = 4 print(prefix_sum[right] - prefix_sum[left - 1])

Two Pointers

투 포인터 특정한 합을 가지는 부분 연속 수열 찾기 문제 해결 아이디어 * 소스 코드 n = 5 # 데이터의 개수 N m = 5 # 찾고자 하는 부분합 M data = [1, 2, 3, 2, 5] # 전체 수열 count = 0 interval_sum = 0 end = 0 # start를 차례대로 증가시키며 반복 for start in range(n): # end를 가능한 만큼 이동시키기 while interval_sum < m and end < n: interval_sum += data[end] end += 1 # 부분합이 m일 때 카운트 증가 if interval_sum == m: count += 1 interval_sum -= data[start] print(count)

기타 그래프 이론

서로소 집합 서로소 집합 자료구조 * 동작 과정 초기에는 각각의 노드가 하나의 집합 서로 다른 집합 부모가 자기 자신 더 큰 루트노드가 더 작은 루트노드를 가리키도록 하는 것을 일반적으로 관행처럼 사용 4의 부모를 1로 변경 마찬가지로 3의 부모를 2로 변경 현재 테이블은 부모 노드를 타내고 있지만 3번노드의 부모는 2이고, 2의 부모노드는 1이므로 결과적으로 3번 노드의 루트노드는 1번 노드이다. 따라서 3번 노드와 4번 노드는 연결되어 있음을 알 수 있음 ==> 같은 집합에 속함 {1, 2, 3, 4}와 {5, 6}은 서로소 관계에 있는 집합 * 연결성 * 기본적인 구현 방법 # 간단한 서로소 집합 알고리즘 # 특정 원소가 속한 집합을 찾기 def find_parent(parent, x): # 루트 ..

최단 경로 알고리즘(Shortest Path)

최단 경로 문제😛 최단 경로 알고리즘은 가장 짧은 경로를 찾는 알고리즘을 의미 다양한 문제 상황 한 지점에서 다른 한 지점까지의 최단 경로 한 지점에서 다른 모든 지점까지의 최단 경로 모든 지점에서 다른 모든 지점까지의 최단 경로 각 지점은 그래프에서 노드로 표현 지점 간 연결된 도로는 그래프에서 간선으로 표현 다익스트라 최단 경로 알고리즘 개요 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로를 계산함 다익스트라 최단 경로 알고리즘은 음의 간선이 없을 때 정상적으로 동작 현실 세계의 도로(간선)은 음의 간선으로 표현되지 않음. 다익스트라 최단 경로 알고리즘은 그리디 알고리즘으로 분류 매 상황에서 가장 비용이 적은 노드를 선택해 임의의 과정을 반복 다익스트라 최단 경로 알고리즘 출발 노드를 설정..

다이나믹 프로그래밍(Dynamic Programming)

다이나믹 프로그래밍🤩 다이나믹 프로그래밍은 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않도록 합니다. 중복 계산을 하지 않는다는 의미 다이나믹 프로그래밍의 구현은 일반적으로 두 가지 방식 탑 다운(Top Down) - 위에서 아래로(하향식) 바텀 업(Bottom Up) - 아래에서 위로(상향식) 동적 계획법이라고도 부름 일반적인 프로그래밍 분야에서의 동적(Dynamic)이란 어떤 의미를 가질까? 자료구조에서 동적 할당(Dynamic Allocation)은 "프로그램이 실행되는 도중에 실행에 필요한 메모리를 할당하는 기법"을 의미 반면 다이나믹 프로그래밍에서는 별다른 의미 없이 사용된 단어. 다이나믹 ..

이진 탐색

이진 탐색 알고리즘 순차 탐색 : 리스트 안에 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위의 절반씩 좁혀가며 데이터를 탐색하는 방법 이진 탐색은 시작점, 끝점, 중간점을 이용하여 탐색 범위를 설정합니다. 이진 탐색의 시간 복잡도 단계마다 탐색 범위를 2로 나누는 것과 동일하므로 연산 횟수는 log2n에 비례합니다. 예를 들어 초기 데이터 개수가 32개일 때, 이상적으로 1단계를 거치면 16개가량의 데이터만 남습니다. 2단계 8개 3단계 4개 다시 말해 이진탐색은 탐색 범위를 절반씩 줄이며, 시간 복잡도는 O(logN)을 보장합니다. 이진 탐색 소스코드 : 재귀적 구현 def binary_search(array, target, sta..

DFS & BFS

그래프 탐색 알고리즘 : DFS / BFS 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미 대표적인 그래프 탐색 알고리즘으로는 DFS와 BFS가 있습니다. 이는 코딩 테스트에서 매우 자주 등장하는 유형이므로 반드시 숙지 파이썬에서 큐를 구현할 때는 덱을 import해서 쓰는 것이 시간복잡도적으로 더 우수. from collections import deque popleft / append로 push와 pop 수행 DFS (Depth - First Search) DFS는 깊이 우선 탐색이라고도 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 DFS는 스택 자료구조(혹은 재귀 함수)를 이용하며, 구체적인 동작 과정은 다음과 같습니다. 탐색 시작 노드를 스택에 삽입하고 방문 처리..

구현 : 시뮬레이션과 완전 탐색

구현(Implementation) 구현이란, 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정 problem - thinking - solution 흔히 알고리즘 대회에서 구현 유형의 문제란 무엇을 의미할까요? 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 지칭합니다. 구현 유형의 예시는 다음과 같습니다. 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제 문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제 적절한 라이브러리를 찾아서 사용해야 하는 문제 일반적으로 알고리즘 문제에서의 2차원 공간은 행렬의 의미로 사용됩니다. 시뮬레이션 및 완전 탐색 문제에서는 2차원 공간에서의 방향 벡터가 자주 활용됩니다. 상하좌우 여행가 A..

Greedy Algorithm (탐욕법)

그리디 알고리즘 그리디 알고리즘은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미한다. 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구 그리디 해법은 그 정당성 분석이 중요 단순히 가장 좋아보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토 일반적인 상황에서 그리디 알고리즘은 최적의 해를 보장할 수 없을 떄가 많음 하지만 코딩 테스트에서의 대부분의 그리디 문제는 탐욕법으로 얻은 해가 최적의 해가 되는 상황에서, 이를 추론할 수 있어야 풀리도록 출제 거스름 돈 - 당신은 음식점의 계산을 도와주는 점원입니다. 카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리의 동전이 무한히 존재한다고 가정합니다. 손님에게 거슬러 주어야 ..

반응형