본문 바로가기

Programming/Python18

python iso format to datetime python 쓰다 보면 datetime으로 변경할 일이 많다. 특히 중간에 T 와 Z로 이루어진 처음 보는 포맷이 있는데 이건 iso 포맷이고 그냥 별 의미 없이 구분자 역할을 T와 Z로 하는 것으로 알고 있다. import dateutil.parser date_string = '2022-06-22T01:55:58.585Z' dateutil.parser.isoparse('2008-09-03T20:56:35.450686Z') # RFC 3339 format dateutil.parser.isoparse(date_string) # RFC 3339 format --- 결과 --- datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=tzutc()) datetime.. 2022. 6. 24.
[Python] shorten url (base64, url safe base64) URL에는 많은 정보가 담김. 그러다 보니 URL이 길어지는 문제가 발생 -> 불편하다! -> 이를 줄이기 위해 shorten url에 대한 고민이 생김 어떤 값을 Encode와 Decode를 하는 여러 가지 방법이 있는데, 알파벳과 로마자로 encode 하는 방식을 base62라고 함 1. a-z : 26개 2. A-Z : 26개 3. 0-9 : 10개 총합 : 62 그래서 base62 특수문자 2개 추가하면 base64 근데 여기 추가되는 두 개 특수문자가 + 와 /인데 이는 url에서 특별한 의미를 가지기 때문에 이렇게 쓰면 안 됨. 그래서 각각 - , _ 로 변환해준 게 base64 url-safe 아래 문제를 풀어봐도 좋겠다. https://leetcode.com/problems/encode-a.. 2022. 4. 23.
[Python] 피보나치 구현 정리 피보나치를 구현하는 방법에 대해 정리 1. 기본 재귀 def fibo(n): if n == 0: return 0 if n == 1: return 1 return fibo(n-1) + fibo(n-2) 2. bottom up 방식 def fibo(n): if n == 0: return 0 if n == 1: return 1 memo = [0] * (n + 1) memo[1] = 1 for i in range(2, n + 1): memo[i] = memo[i - 1] + memo[i - 2] return memo[n] 위 코드는 공간 복잡도가 n이 커짐에 따라 선형적으로 증가하기 때문에 O(n) 3. bottom up 방식 + 공간 복잡도 효율 def fibo(n): if n == 0: return 0 me.. 2022. 4. 10.
[Python] 순열 조합 구현 순열 def permute(self, nums: List[int]) -> List[List[int]]: answer = [] prev_elements = [] def dfs(elements): if len(elements) == 0: answer.append(prev_elements[:]) return for e in elements: next_elements = elements[:] next_elements.remove(e) prev_elements.append(e) dfs(next_elements) prev_elements.pop() dfs(nums) return answer 조합 def combine(self, n: int, k: int) -> List[List[int]]: answer = [] n.. 2022. 4. 8.
Python이 느린 이유? Python이 느린 이유. 지금까지 공부했을 때는 그냥 인터프리터 언어라서~ GIL 때문에~ 이러면서 적당히 넘어갔었는데, 찾아보며 하나하나 공부하다 보니 심오한(?) 내용들이 많았다 일단 내가 이해한 Python이 느린 이유를 간단하게 적고 조금씩 자세하게 추가 해 나가도록 해야겠다. Python은 인터프리터 언어인가요? 나의 생각은 반만 인터프리터 사실 인터프리터, 컴파일러 언어라는게 상당히 애매모호한 개념이다. 1. 사실 Python이 느린 게 아니라 Python의 표준 구현체인 Cpython이 느린 것. - Cpython 과 pypy의 차이 + 구현체가 어떻게 동작하길래? 2. 인터프리터, 컴파일러의 차이 (컴파일이 의미하는 게 뭐길래?) - 사실 Python도 어떻게 보면 컴파일 언어고 어떻게 .. 2022. 4. 2.
python 다중 할당 동작방식 python 다중 할당의 동작 방식에 대해 어렴풋이 이해하고 있었는데, 이번 기회에 확실하게 짚고 넘어가야겠다. 일단 파이썬에서는 다중 할당(Multiple Assignment)을 지원한다. 이는 2개 이상의 값을 2개 이상의 변수에 동시에 할당하는 것을 말한다. a, b = 1, 2 >>> a 1 >>> b 2 위와 같이 a와 b 변수 각각의 값을 1, 2로 할당해 주었다. 좀 더 복잡한 경우에 어떻게 동작하는지 테스트해보았다. 아래 코드를 보자. class SingleLinkedList: def __init__(self, name, val=0, next=None) -> None: self.name = name self.val = val self.next = next def __repr__(self):.. 2022. 3. 23.
python typing optional python에서는 굳이 타입을 명시하지 않아도 duck typing (동적 타이핑)을 통해 객체의 타입이 결정된다. 이는 편리하다는 장점이 있지만, 코드가 많아지게 되면 뭐가 뭔지 알아보기 힘들다는 단점이 있다. 이를 보완하기 위해 파이썬에서는 typing을 지정할 수 있게 typing 모듈을 제공한다. https://docs.python.org/3/library/typing.html typing — Support for type hints — Python 3.10.3 documentation Note The Python runtime does not enforce function and variable type annotations. They can be used by third party tools .. 2022. 3. 23.
python의 LEGB 규칙 파이썬에서 변수에 값을 바인딩하거나 변수의 값을 참조하는 경우 LEGB 규칙을 따른다. 1. L - Local의 약자로 함수 안을 의미한다. 2. E - Enclosed function locals의 약자로 내부 함수에서 자신의 외부 함수의 범위를 의미한다. 3. G - Global의 약자로 함수 바깥 즉, 모듈 범위를 의미한다. 4. B - Built-in의 약자로 open, range와 같은 파이썬 내장 함수들을 의미한다. a = 10 def test(): a = 20 print(a) test() 위 코드에서 test 함수가 호출되게 되면 a라는 변수가 바인딩하는 값을 출력하게 된다. 즉 변수가 바인딩하는 값을 참조해서 출력하고자 하므로 LEGB순으로 탐색한다. test 함수 안이 바로 local 영.. 2022. 1. 11.
python 함수의 생성과 호출 python에서 변수가 값에 대한 이름표라면 함수 이름은 코드에 대한 이름표이다. 함수를 정의하게 되면 실제로 아무것도 일어나지 않는다고 배웠다. 아래 코드를 실행하게 되면, def hello(): print("hello") 파이썬 인터프리터가 메모리에 함수 객체를 할당하고 이를 hello라는 함수 이름이 바인딩하게 된다. >>> id(hello) 4399217408 hello는 스택메모리, 함수는 힙 메모리 함수 이름은 함수 객체를 바인딩한다. def hello(): print("hello") f = hello f() f의 이름으로 hello 함수 객체를 바인딩한 후에 ( )를 통해 호출할 수 있다. 2022. 1. 11.
python 비교 연산자와 is 연산자 파이썬에서는 두 값을 비교할 때 == 연산자를 사용하게 된다. 이는 두 값이 같은지를 비교한다. 동일한 주소에 할당된 객체임을 비교하려면 is 연산자를 사용하면 된다. >>> a = 1000 >>> b = 1000 >>> a == b True >>> a is b False >>> id(a), id(b) (4399073552, 4399073584) 좀 더 작은 정수 값인 256을 바인딩하게 되면 ==와 is 연산자 모두 True를 리턴한다. 이는 a 와 b 모두 동일 객체를 바인딩하고 있다. >>> a = 256 >>> b = 256 >>> id(a), id(b) (140399467366080, 140399467366080) >>> a == b True >>> a is b True 파이썬은 정수 256까지.. 2022. 1. 11.
#7 Python 코딩테스트 최단 경로 알고리즘 https://www.youtube.com/watch?v=acqm9mM1P6o&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=7 이 포스팅은 위의 영상을 보고 제가 필요하다고 생각된 부분을 정리한 포스팅입니다. 다익스트라 알고리즘 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로를 계산 - 음의 간선이 없을 때 정상적으로 동작. - 그리디 알고리즘에 속함. 다익스트라 알고리즘 간단한 구현 방법 import sys input = sys.stdin.readline INF = int(ie9) # 무한을 의미하는 값으로 10억을 설정 n, m = map(int, input().split()) start = int(input()) # 각 노드에 연결되어 있는 노드에 대.. 2021. 11. 17.
#6 Python 코딩테스트 다이나믹 프로그래밍(DP) https://www.youtube.com/watch?v=5Lu34WIx2Us&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=6 이 포스팅은 위의 영상을 보고 제가 필요하다고 생각된 부분을 정리한 포스팅입니다. 다이나믹 프로그래밍 메모리를 적절히 사용하여 수행 시간 효율성을 비약적으로 향상시키는 방법. 이미 계산된 결과(작은 문제)는 별도의 메모리 영역에 저장하여 다시 계산하지 않음 구현은 Top - Down , Bottom - Up 동적 계획법이라고도 부름 문제가 다음의 조건을 만족할 때 사용 할 수 있음. 1. 최적 부분 구조 (Optimal Substructure) - 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다. 2.. 2021. 10. 23.
#5 Python 코딩테스트 이진 탐색 https://www.youtube.com/watch?v=94RC-DsGMLo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=5 이 포스팅은 위의 영상을 보고 제가 필요하다고 생각되는 부분을 정리한 포스팅입니다. 순차 탐색 : 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법 이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법 - 이진 탐색은 시작점, 끝점, 중간점을 이용하여 탐색 범위를 설정합니다. 절반씩 데이터를 쪼개서 탐색하기 때문에 O(logN)의 시간 복잡도를 가지게 됨 # 이진 탐색 소스코드 구현 (재귀 함수) def binary_search_recursive(array, target.. 2021. 10. 20.
#4 Python 코딩테스트 정렬 알고리즘 https://www.youtube.com/watch?v=KGyK-pNvWos&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=4 이 포스팅은 위의 영상을 보고 제가 필요하다고 생각된 부분을 정리한 포스팅입니다. 정렬 알고리즘 - 데이터를 특정한 기준에 따라 순서대로 나열하는 것. 1. 선택 정렬 처리되지 않은 데이터 중 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복 array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i for j in range(i + 1, len(array)): if array[min_index] > array[j]: min_index = .. 2021. 10. 20.
#2-3 Python 코딩테스트 그리디 알고리즘 , DFS & BFS https://www.youtube.com/watch?v=2zjoKjt97vQ&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=2 https://www.youtube.com/watch?v=7C9RgOcvkvo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=3 이 포스트는 위의 영상을 보고 제가 필요하다고 생각된 부분을 정리한 포스팅입니다. 그리디 알고리즘 : 현재 상태에서 지금 당장 좋은 것만 고르는 방법-> 이 방법을 이용했을 때 최적의 해를 구할 수 있는지 검토하는 것이 필요함. 스택 , 큐 : - 스택은 선입 후출 형태 list를 그대로 사용한다. append, pop을 활용. - 큐는 선입선출 형태 from collections.. 2021. 10. 20.