컴퓨터 공부 217

[Airflow] 에어플로우가 뭘까?

Airflow는 파이썬으로 제작된 도구이자 워크플로우 생성시에도, 파이썬으로 구현해야 합니다 하나의 워크플로우는 DAG이라고 하며, DAG은 Directed Acyclic Graph 의 약자로, 방향성을 가진 그래프지만, 순환하지 않는 그래프를 말합니다. ( 보통 '댁'이라고 말합니다) DAG 안에는 1개 이상의 TASK 가 존재하며, TASK간 선후행 연결은 가능하지만, 순환되지는 않습니다. 보통 워크플로우(dag)는 다음과 같은 단계(task)를 거칩니다. 1. Rest API를 사용한 데이터를 받아서 전처리 2. 데이터를 DB에 넣기 전에 중복을 제거하기 위한 처리 3. 전처리한 데이터를 DB에 삽입 Cron 기반의 스케쥴링을 사용합니다. (리눅스에서 사용하는 기법으로, task들이 실행되어야 하는..

[리트코드/leetcode/python] 238. Product of Array Except Self

이 문제를 푸는 것에 있어서 O(n^2)으로는 바로 풀 수 있겠지만, 결과적으로 시간초과가 나고, follow up을 보면, 공간복잡도를 O(1)로 풀기를 제안하고 있습니다. 처음에 제가 접근한 방식은 배열의 길이를 2배로 늘려서 [1,2,3,4] 가 인풋 배열이라면, [1,2,3,4,1,2,3,4] 로 만든 후, 1을 바라볼 때는, [2,3,4] 의 곱을 2를 바라볼 때는 [3,4,1], 3을 바라볼 때는 [4,1,2], 4를 바라볼 때는 [1,2,3] 을 곱해서 결과 배열을 만드려고 했습니다. 위와 같은 방식으로 문제를 풀 때, 많은 변수들이 필요했고, 파이썬의 for문을 돌면서, index를 다시 뒤로가도록 하는 것에 있어서 어려움을 겪었습니다. 결국, 저는 문제를 O(n)의 방식으로 30분만에 풀..

[리트코드/leetcode/python] 209. Minimum Size Subarray Sum

처음에 그냥 생각나는 로직대로 푼 알고리즘은 다음과 같습니다. nums를 처음부터 더하는데, target보다 같거나 커지면, check 변수를 통해 플래그를 걸어 놓고 여태 더했던 순회 횟수, 즉 길이를 저장합니다. 그리고 다음 인덱스로부터 또 같은 행동을 반복하는데, 최소 길이가 갱신 된다면 최소 길이를 갱신하고 그렇지 않다면 그냥 패스합니다. 풀었던 코드는 아래와 같습니다. 푼 코드는 아래와 같습니다. class Solution(object): def minSubArrayLen(self, target, nums): for i in range(len(nums)): tmp = 0 for j in range(i,len(nums)): tmp += nums[j] if tmp >= target : length ..

[리트코드/leetcode/python] 347. Top K Frequent Elements

이 문제를 처음 봤을 때 계수정렬을 생각해봤습니다. nums[i]의 범위가 -10^4 부터 시작되므로, 음수도 포함될 수 도 있기에, 음수일 때와 양수일 때를 나눠서 계수정렬로 로직을 짰었습니다. 하지만, 계수정렬을 한 리스트가 내림차순되면서, k 번째까지 리스트를 슬라이싱 하는데에, 원소 순서가 변하기에 한계가 있었습니다. 어떤 수가 몇 번 나왔는지를 체크해야 하므로, 계수정렬보다는 딕셔너리 등을 사용하는 것이 더 적합했습니다. follow up을 보면, O(n log n)의 시간복잡도를 구현해보라고 하는데, 딕셔너리로 풀 때, O(n)으로 풀리는 것이 아닌가 하는 의구심으로 문제를 풀기 시작했습니다. 푼 코드는 아래와 같습니다. class Solution(object): def topKFrequent..

[Github/깃허브] Git 협업 플로우를 살펴보자!

깃헙에서 협업을 할 때의 과정을 간략하게 그림으로 표현해봤다. 순서에 따라서 한번 깃 협업 과정을 살펴보자! 1. 깃허브 원격 저장소에서 내용을 로컬 저장소로 가져온다 로컬 저장소가 없을 때(최초에는) : git clone ~ 로컬 저장소가 이미 있을 때 : git pull origin main ⬇️ 2. 로컬 저장소에서 작업할 브랜치를 생성 후 해당 브랜치로 이동한다 git branch 브랜치이름 git checkout 브랜치이름 or 커밋 ( VScode의 Extension중에서 해당 Extension을 다운받으면 브랜치가 이슈별로 자동 생성된다) ⬇️ 3. 브랜치 안에서 원하는 작업을 수행한다 ⬇️ 4. 브랜치에서 수행한 작업을 git에 올린다 (작업 중인 브랜치 안에서 명령어 실행) git add..

반응형