Python 75

[리트코드/leetcode/python] 2593. Find Score of an Array After Marking All Elements

문제의 로직은 간단했습니다. 주어진 배열 nums에서 마크되지 않은 최소값을 더해가며 총 합을 출력하면 되는 문제였습니다. 여기서 마크되지 않았다는 것은 문제에서 주어진 예시를 보면 잘 이해가 될 것입니다. 쉬운 문제라고 생각했지만, 처음에는 풀지 못했습니다. 제가 처음에 풀었던 코드는 아래와 같습니다. class Solution: def findScore(self, nums: List[int]) -> int: res = 0 mark = [0 for _ in range(len(nums))] tmp = nums[:] while len(tmp)!=1: res += min(tmp) target = tmp.index(min(tmp)) print("index:",target,"min value:",min(tmp)..

[Airflow] 파이썬 함수 파라미터 이해

함수를 실행시킬 때, 인수 없이 그냥 함수만 실행시키는 것이 아니라, 파이썬 오퍼레이터에도 함수 인수를 주는 것을 이해하려면 먼저 파이썬 함수 파라미터를 어떻게 받는지 이해가 선수되어야 합니다. 1. 파이썬 함수 인자 *args args로 들어온 값은 튜플로 저장이 됩니다. args에서 값을 꺼낼 때에는 인덱스를 이용합니다. (ex: args[0], args[1]) args라는 이름 외 다른 이름으로 받아도 됩니다.(ex: some_func(*kk):) 2. 파이썬 함수 인자 **kwargs (=keyword arguments) kwargs로 들어온 값은 딕셔너리 형태로 저장이 됩니다. kwargs에서 값을 꺼낼 때에는 get()함수를 이용합니다. (ex: name = kwargs.get('name'))..

[Airflow] @task 데코레이터 사용하기

1. 파이썬 데커레이터 Decorator는 장식하고 꾸미는 것을 의미하는데, 함수를 장식하는 것이라고 이해하시면 됩니다. 원래의 함수를 감싸서(Wrapping) 바깥에 추가 기능을 덧붙이는 방법입니다. ※ 함수를 감싼다는 것이 어떤 의미일까요? 파이썬은 함수 안에 함수를 선언하는 것이 가능하고 함수의 인자로 함수를 전달하는 것이 가능하며 함수 자체를 리턴하는 것이 가능합니다. def outer_func(target_func): # 내부 함수 정의 def inner_func(): print("target 함수 실행 전입니다.") target_func() print("target 함수 실행 후 입니다.") # 내부 함수 리턴 return inner_func 예시를 한 번 들어봅시다. 파이썬 데코레이터를 사용..

[Airflow] 외부 파이썬 함수 수행하기

DAG 외부에서 함수를 만들었을 때, 그 함수를 import 해서 실행시키는 방법에 대해서 알아보겠습니다. 1) 파이썬 모듈 경로 이해하기 : dag에서 우리가 만든 외부 함수를 import 해와야 하는데, import 경로를 어떻게 작성해야 하는지 알려면, 파이썬 모듈 경로를 이해해야 합니다. 먼저 airflow의 오퍼레이터를 불러올 때는 아래와 같은 코드가 필요했습니다. from airflow.operators.python import PythonOperator : "Airflow 폴더 아래 operators 폴더 아래 python 파일 아래에서 PythonOperator 클래스를 가지고 온다"는 뜻입니다. ※ 그렇다면, 파이썬은 위 경로를 어떻게 찾을까요? : 파이썬은 sys.path 변수에서 모듈..

[Airflow] Python operator 기본

파이썬 오퍼레이터는 어떤 역할을 하는지 알아봅시다. 먼저 라이브러리를 어떻게 사용하는지부터 살펴볼까요? from airflow.operators.python import PythonOperator # bash operator는 .bahs 였다면, python operator는 .python으로 라이브러리를 불러옵니다. Python Operator는 무엇을 하는 오퍼레이터일까요? : "정의된 파이썬 함수를 실행시키는 오퍼레이터" 입니다. (오퍼레이터는 새로운 파일을 생성하는 것이 아닌, 기존 파일을 실행 시켜주는 역할을 합니다.) 가장 많이 쓰이는 Operator로서, Airflow를 배운다면, 꼭 알아야 하는 오퍼레이터라고 할 수 있습니다! ※ 파이썬 모듈에는 어떤 오퍼레이터가 있을까? 패키지 오퍼레이터..

[리트코드/leetcode/python] 735. Asteroid Collision

한 번 문제를 이해해봅시다. 입력값으로 주어진 asteroids 배열은 소행성 배열입니다. 이 소행성은 양수값을 가질 수도 있고, 음수값을 가질 수도 있습니다. 양수값을 가진 소행성은 오른쪽으로 움직이고, 음수값을 가진 소행성은 왼쪽으로 움직입니다. 모든 소행성은 크기에 관계없이 같은 속도로 움직이기 때문에, 추월, 정지 등의 사건이 발생하지 않습니다. 두 소행성이 충돌했을 때는, 소행성의 크기의 절댓값에 따라서 소행성이 사라집니다. 예를 들어, '2'의 소행성과 '-5'의 소행성이 충돌했다면, '-5'의 소행성이 더 절댓값이 크기 때문에 '2'의 소행성이 없어지고, '-5'의 소행성은 계속해서 움직였던 방향대로 지나갑니다. 이 때, 두 소행성의 크기의 절댓값이 같다면, 두 소행성이 충돌했을 때는 두 소..

[리트코드/leetcode/python] 518. Coin Change II

많이들 접해보신 DP의 단골문제 동전문제입니다. 주어진 동전을 얼마든지 사용하면서 amount를 만들 수 있는 총 가짓수를 구하는 문제인데요, 이 외에도 가장 최소의 동전 개수만 사용해서 푸는 문제 등 동전에 관한 DP문제는 이제 거의 정형화된 알고리즘으로 자리잡았습니다. 그렇기 때문에, 해당 문제를 푸는 방향도 처음 본 문제라면, 접근이 어려울 수 있습니다. 특히, DP는 많은 유형을 풀어봄으로써 어느정도 유형화를 하는 것도 방법입니다. 이 문제에 대해서는 먼저, 메모제이션 기법을 사용해서 전형적인 DP로 풀어보도록 하겠습니다. 그럼, 이 문제에 대해 이해를 시각화해볼까요? 원리를 살펴보면 다음과 같은 테이블을 그릴 수 있습니다. 테이블의 열은 '(원)'을 뜻하며, 0원부터 amount(=5)원까지 테..

[리트코드/leetcode/python] 647. Palindromic Substrings

해당 문제는 팰린드롬 문제입니다. '팰린드롬'이라는 것은 문자열을 앞에서 읽나 뒤에서 읽나 동일한 문자열 형태를 띄는 문자열을 말하는데요, 'a'라는 단일문자도 팰린드롬에 속하는 것을 유의하면 됩니다. 이 문제에서는 주어진 문자열 s 에 들어있는 팰린드롬 문자열이 총 몇개인지 파악하는 문제입니다. 첫번째 예시에서 문자열 s는 'abc'인데, 각 단일문자만이 팰린드롬이고, 그 외에는 팰린드롬이 아니기에 결과를 3을 리턴합니다. 두번째 예시에서 문자열 s는 'aaa'인데, 결과가 6이 나왔습니다. 먼저 각 위치에서 'a'가 단일문자로서 팰린드롬을 형성하고, 첫번째,두번째 문자로 이루어진 'aa'와 두번째, 세번째 문자로 이루어진 'aa'가 총 2개 있습니다. 마지막으로 'aaa'도 팰린드롬 문자열이기에 결과..

[리트코드/leetcode/python] 3. Longest Substring Without Repeating Characters

이 문제를 처음봤을 때, 최장수열과 관련한 풀이가 떠올랐습니다. 최장수열은 대표적인 DP 유형의 문제로서 기억을 하고 있기에 보자마자 DP를 활용해보고자 했습니다. 이 문제의 핵심은 문자열 S를 순회하면서 반복되지 않는 문자를 가지는 문자열의 최대 길이를 반환하는 것입니다. 그렇다면, 순회를 할 때 계속해서 알아야 하는 값은 현재 위치에서 조건에 맞는 문자열을 만들 수 있는 최장길이 이전에 똑같은 문자가 나왔는지에 대한 여부 로 정리할 수 있겠습니다. 그럼, 바로 코드를 살펴보고, 코드 해석을 해보도록 하겠습니다. 코드는 아래와 같습니다. class Solution(object): def lengthOfLongestSubstring(self, s): if s == "": return 0 dp = [1] ..

[Airflow] Docker를 통한 Airflow 설치

도커를 이용해서 airflow를 설치해보기 전에, 도커에 대해 간략하게 살펴보고 갑시다. 도커가 있기 전에는 가상화서버(Virtual Machine)라는 것을 많이 이용했습니다. 가상화 서버에는 'Hyper Visior' 라는 것이 있는데, Hyper Visor는 물리적인 서버 위에 설치되어 있는 OS가 아닌 그 OS위에 가상화 VM들을 올리고 관리할 수 있도록 해줍니다. 가상화 VM들을 여러개 세팅하고 나면, 이 가상화 VM들은 서로간에 영향을 주지않고 완전히 독립적인 환경에서 구동될 수 있는 장점이 있었습니다. 하지만, 단점이 분명 존재하는데, 바로 '오버헤드'입니다. CPU나 메모리, 디스크 같은 공간을 가상화 서버에다가 명시적으로 할당을 해줘야하기 때문에, 그만큼 호스트 OS가 사용할 수 있는 가..

반응형