파이썬 내장함수 enumerate
enumerate"순서가 있는" 자료형에 대해서, 인덱스와 값을 포함해서 리턴해준다.즉, 인덱스 & 값을 둘 다 사용하고 싶을 때 쓸 수 있다.values = [40, 30, 20, 10, 50]indexed_values = [(value, index) for index, value in enumerate(values)]print(indexed_values)print(indexed_values[1])print(indexed_values[1][1])# 출력[(40, 0), (30, 1), (20, 2), (10, 3), (50, 4)](30, 1)1그러나 인덱스 값을 바꿀 순 없다.... indexed_values[1][1] = 10 이런거 불가능
2024. 8. 3.
필독!!) DP (Dynamic Programming)
DP처음 보면 dynamic programming이 무슨 뜻인지 감이 잘 안오는데, 쉽게 말하면 중복되는 과정은 재사용하겠다는 것이다. 큰 문제를 해결하는데 작은 문제들이 사용된다면, 이를 어디다가 저장해놓고 큰 문제를 해결하는데에 이용한다.이 맥락에서 알 수 있듯이, 작은 문제의 결과를 저장해야 하므로 메모리를 추가적으로 사용한다.그러나 생각해보자. 100이라는 문제를 푸는데 단계별로 1, 2, 3, ... , 98, 99가 필요하다고 한다면, 99까지의 결과를 어디다가 저장해두고, 99 → 100 이렇게 한단계만 푸는 게 효과적이지 않겠는가?? 그래서 메모리는 추가적으로 들지만 앞단계를 다 스킵할 수가 있으므로 시간을 많이 단축할 수 있다.Memoization위에서 설명했던, 메모리를 추가로 사용해서..
2024. 7. 29.
이진탐색 요약
이진탐색이진탐색의 제일 큰 특징은 "정렬된 데이터"에서 탐색하는 것이다(오름차순). 이유는 이진탐색이 search하는 방식에서 드러난다.ex) 1 2 3 4 5에서 4를 찾는다고 할 때, 제일 먼저 리스트의 가운데를 탐색한다. 목표인 4를 가운데값 3과 비교해서 크면 오른쪽, 작으면 왼쪽으로 탐색을 이어간다. 이처럼 값의 크기에 따라 "왼쪽", "오른쪽"과 같이 방향을 가져야하므로 반드시 정렬이 된 상태로 탐색이 진행되어야한다.가운데값을 보고 계속 탐색 범위를 반씩 줄여가므로 시간 복잡도는 O(log N)이 된다.구현재귀, 반복문 2가지 방법으로 구현이 가능하다. 공통점은 무조건 정렬하고 시작해야한다는 것 !!반복문으로 구현data = [4,2,3,7,1,9,6]data.sort()def binary_s..
2024. 7. 29.