본문 바로가기

공부

(44)
[Algorythm] 누적합 1. 누적합 누적합은 리스트의 각 원소에 대해 누적합을 가진 리스트를 별도로 생성해 구간합을 미리 구해두는 방법. 원소/혹은 구간 누적합을 범위 누적합에서 빼주면 되기 때문에, 특정 구간 누적합을 구하기 쉽다. 과정은 아래와 같다.누적합 저장 리스트 만들기인덱스 구간에 따른 누적합을 저장 리스트에 추가#1 합의 리스트arr = [1, 2, 3, 4, 5, 6, 7]sum_arr = []total = 0for a in arr: total += a sum_arr.append(total)print(sum_arr) # [1, 3, 6, 10, 15, 21, 28]#2 accumulate 함수from itertools import accumulatearr = [1, 2, 3, 4, 5, 6, 7]su..
[Algorythm] 백트래킹 완전탐색의 효율성을 개선한 알고리즘으로, 가능성이 없는 곳을 제외하고 가능성 있는 곳만 탐색하는 알고리즘. 해가 될 가능성을 배제하기 때문에 완전탐색보다 효율적이다. 백트래킹 알고리즘의 핵심은 해가 될 가능성을 판단하는 것이다. 과정은 다음과 같다.유효한 해의 집합 정의정의한 집합을 그래프로 표현유망함수(해가 될 가능성) 정의백트래킹 알고리즘으로 해를 찾기 1. 1759번 암호 만들기 암호는 서로 다른 L개의 알파벳 소문자들로 구성되며 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 구성되어 있다고 알려져 있다. 또한 정렬된 문자열을 선호하는 조교들의 성향으로 미루어 보아 암호를 이루는 알파벳이 암호에서 증가하는 순서로 배열되었을 것이라고 추측된다. 즉, abc는 가능성이 있..
[Algorythm] 다익스트라 & 벨만 포드 다익스트라 시작노드로부터 모든 노드의 최단 거리를 구하는 알고리즘이다. 최단거리 탐색을 위해 존재하는 모든 엣지가 탐색 대상이 되며, "최단거리가 확정되지 않은 노드 중" "시작노드로부터 최단거리 노드" 로 탐색이 이어진다. 이러한 탐색은 현재까지의 경로 비용이 가장 짧은 노드부터 차례대로 처리하면, 이후에는 더 짧은 경로가 없다는 가정이 선행된다. "최단거리가 확정되지 않은 노드"는 아직 "우선순위 큐에 남아있는(더 짧게 갱신될 수 있는) 노드"들이다. 반면 "최단거리가 확정된 노드"는 "우선순위 큐에 없는 노드"이다.더보기 2 A ----- B \ / 1 \ / 5 \ / C 초기상태distance: {A: 0, B: ∞, C: ∞}queue: [(0, A..
[python] decorator, closure, iterator, and generator 1. 클로저 함수: 함수 안에 함수가 구현되어, 외부함수가 내부 함수를 리턴하도록 설계된 구조의 함수 (정확히 말하면 내부함수가 클로저함수이다. 함수 밖의 변수를 기억하는 함수). 이때 외부 함수는 자신이 가진 변숫값 등을 내부 함수에 전달할 수 있다.# wrapper.pydef mul(m): # 인자 m 필요 def wrapper(n): return m * n return wrapperif __name__ == "__main__": mul3 = mul(3) # mul3 = wapper(m=3): 함수 호출 시 내부함수에 m 전달 mul5 = mul(5) print(mul3(10)) # 30 출력 print(mul5(10)) # 50 출력 외부 함수..
[python] 파이썬 이론 공부 1. 함수# datetime.date# 연, 월, 일로 날짜를 표현할 때 사용import datetimeday1 = datetime.date(2021, 12, 14)# 최대 공약수: math.gcd# 최소 공배수: math.lcmimport mathmath.gcd(60, 100, 80)math.lcm(15, 25)# 난수(규칙이 없는 임의의 수) 생성import randomrandom.random() # 0.0에서 1.0 사이의 실수 범위 내# >>> 0.53840103305098674random.randint(1, 10) # 1에서 10 사이의 정수 범위 내# >>> 6# 두 번째 인수 갯수만큼 무작위 추출random.sample([1, 2, 3, 4, 5], len(data)) # >>> [5, 1,..
[BE] BE framework and Flask 1. 프레임워크: 여러 기능을 가진 클래스와 라이브러리가 '특정 결과물을 구현하기' 위한 목적으로 합쳐진 형태로, 개발을 보다 쉽고 간편히 할 수 있도록 도와주는 도구 개발자들은 1) 사용 목적(프론트/백)에 따라 2) 사용 언어에 따라 다양한 프레임워크를 사용한다. 파이썬JavaScript(Node.js 기반)JAVAFront React BackDjango, FlaskExpressSpring Boot 먼저 백앤드 프레임워크란 "서버에서 실행될 어플리케이션 개발을 돕는 프레임워크"이며, 대표적인 파이썬 프레임워크로는 Flask가 있다. 개발자들은 백앤드 프레임워크 Flask를 통해, 프론트의 요청을 기반으로 API 생성 후 이를 다시 사용자에게 전달하거나, DB를 연동하는 등 전체 어플리케이션의 작..
[Algorythm] 그리디 알고리즘 Greedy algorythm: 지역 최적해를 추구하는 알고리즘. 매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 결과를 도출한다. 1) 최적해를 보장하는 상황최적 부분 구조: 부분해를 푸는 과정이 최적해를 구하는 과정과 일치그리디 선택 속성: 선택 과정이 다른 과정에 영향을 주지 않음 2) 최소신장 구조: 그리디 알고리즘을 사용하는 대표적 트리형태 자료구조로, 신장 트리 중 간선 가중치 합이 최소인 것. 그리디 알고리즘 중에서도 1) 프림 알고리즘과 2) 크루스칼 알고리즘을 사용신장트리: 모든 정점이 간선으로 연결되어 있고 간선 구조가 정점 갯수보다 하나 적은 그래프프림 알고리즘 O(E*logV)임의의 정점 하나를 선택해 최소 신장트리에 추가최소 신장트리와 연결된 정점 중 가장 가중치가 적고, 순..
[IDE] Interpreter, Compiler, Kernel 1. IDE 통합개발환경. 즉, 개발에 필요한 텍스트 에디터, 컴파일러, 인터프리터, 디버거 등 여러 가지 도구들을 한 번에 제공하는 프로그램 IDE에 입력되는 언어는 인터프리터 언어(python, JS, SQL 등)과 컴파일 언어(C, C++, ...)로 분류되며 특징은 다음과 같다.기능컴파일러인터프리터번역단위전체행(라인)별도의 목적 파일생성O생성X실행속도빠름느림번역속도느림빠름 이런 차이는 왜 발생하는가? IDE에 입력된 코드는 컴파일을 거쳐 low-level 언어로 변환되고, 최종적으로 (컴퓨터가 바로 알아들을 수 있는) 기계어로 번역되어야 코드가 실행된다는 것이 그 원인이다. 일단, 컴파일러를 통과한 언어는 바로 기계어가 될 수도 있고, 파이썬처럼 바이트코드가 될 수도 있다. 컴파일에는 4가지..