Python 7

[자료구조] 파이썬으로 LRU cache O(1) 구현하기

LRU cache O(1) 캐시는 불필요한 통신을 줄이고 기민한 UX를 제공 DB과부하를 막음.(query결과 저장) Proxy, CDN(유저와 가까운 CDN node) 메모이제이션 OrderedDict이용 from collections import OrderedDict MAX_SIZE = 2 cache = OrderedDict() def get_user(user_id): if user_id in cache: cache.move_to_end(user_id) return cache[user_id] if len(cache) == MAX_SIZE: cache.popitem(last=False) cache[user_id] = fetch_user(user_id) return cache[user_id] last=F..

[알고리즘] 이분탐색의 친구 Parametric search

Parametric Search 최적화 해법인 이분탐색을 결정문제로 바꾸어 푸는 기법. ex.) 고기를 200g잘라라 -> 고기가 200g보다 가벼운가? 무거운가? 의 결정문제로 바꿈.(예 아니오) 특정 값을 찾는게 아닌 오차 범위 내에서 가장 가까운 부등호 식으로 결과를 판별한다. 가능한 해의 영역이 연속적이어야 한다. (최솟값 결정문제 a가 만족한다면 a이상의 값은 모두 만족.) 예제 BOJ 1637 날카로운 눈 import sys input = sys.stdin.readline def get_sum(target): total = 0 for i in range(N): if target >= arr[i][0]: total += ((min(arr[i][1],target) - arr[i][0])//arr[..

[백준][Python] 1240 노드사이의 거리

출발지, 도착지에 따라. BFS로 거리구하면 끝. import sys input = sys.stdin.readline from collections import defaultdict,deque def Distance(a,b): queue = deque() queue.append(a) visited = [False]*(N+1) visited[a] = True target_dist = [0]*(N+1) while queue: v = queue.popleft() if v==b: print(target_dist[v]) return for next,dist in graph[v]: if not visited[next]: queue.append(next) visited[next] = True target_dist[n..

[백준][Python] 17123 배열놀이

처음에 그냥 matrix에 넣었다가 시간초과나고 합연산은 한번에 하는걸로 코드 수정. 통과 import sys input = sys.stdin.readline for test in range(int(input())): N,M = map(int,input().split()) matrix = [list(map(int,input().split())) for _ in range(N)] ans = [[] for _ in range(2)] for i in range(N): ans[0].append(sum(matrix[i])) for i in range(N): ans[1].append(sum(matrix[m][i] for m in range(N))) for _ in range(M): r1,c1,r2,c2,v = ma..

[백준][Python] 9242 폭탄해제

처음에 6으로 나눠떨어져야 한다는 조건 못봐서 실패. 그리고 한참 디버깅코드 안빼고 왜 실패하지?? 고민하다 결국 ans디버깅 코드 넣어논거 발견하고 해결. 코드 더 줄일 수 있을 것 같지만 그냥 제출. matrix = [input() for _ in range(5)] N = (len(matrix[0])//4)+1 zero = ['***','* *','* *','* *','***'] one = [' *',' *',' *',' *',' *'] two = ['***',' *','***','* ','***'] three = ['***',' *','***',' *','***'] four = ['* *','* *','***',' *',' *'] five = ['***','* ','***',' *','***'] s..

[Python] Web Crwaling을 위한 지식.

웹 크롤링이란? 조직적, 자동화된 방법으로 웹을 탐색하는 것. => 데이터(API) 최신 상태 유지를 위해 웹 크롤링을 한다. 요청(request)은 URL 응답(response)은 Text 덩어리(문서) (딕셔너리를 받는다고 말하면x string덩어리(HTML,XML,JSON)) 검색 https://www.google.com/search?q=summer&rlz=1C1CHZN\_koKR942KR942&oq=ssafy&aqs=chrome..69i57j69i59l3j69i60l4.1821j0j15&sourceid=chrome&ie=UTF-8 google에 summer를 검색한 결과이나 실질적으로 https://www.google.com/search?q=summer 이거만 검색해도 동일한 페이지(주소)를 보여..

[백준][Python] 13398 연속합 2

n = int(input()) lst = list(map(int, input().split())) # 원소 제외 없는 결과, 원소 하나 제외한 결과 dp = [[0, 0] for _ in range(n)] # 초깃값 : 나자신 or 나를 제외한 경우. dp[0] = [lst[0], -999999999] for i in range(1, n): # 끊고 출발하거나 이전에꺼에 덧붙히거나. dp[i][0] = max(dp[i - 1][0] + lst[i], lst[i]) # 이전까지의 합에 나를 제외한 경우.(+0이 생략된 값을 이어붙힘), 이전까지의 합에 나를 붙힌경우(생략x) # => 앞에서 -가 생략이 됐고 그게 최적이라면 dp[i-1][1]+lst[i]가 더 커야하고 아니라면 # 앞의 생략이 최적이 아니..