분류 전체보기 720

[Programmers][Python][2021 카카오 인턴십] 거리두기 확인하기

각 지점에서 거리 2까지만 확인해주면 됩니다. 거리두기 안지켰으면 바로 return False 해줍니다. delta = ((0, 1), (1, 0), (0, -1), (-1, 0)) def is_check(place): q = [] for i in range(5): for j in range(5): if place[i][j] == 'P': q.append((i, j, 0, set())) while q: x, y, dist, visited = q.pop() visited.add((x, y)) for dx, dy in delta: nx, ny = x + dx, y + dy if 0

[Django] ORM 성능 최적화 N + 1 Problem

ORM이란 Object Relation Mapper 객체와 관계형 data를 자동으로 매핑해주는 것. 객체를 통해 간접적으로 database data를 다룬다. ORM의 장점 객체지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중 할 수 있게 해준다. 재사용 및 유지보수 용이 DBMS에 대한 종속성이 줄어든다. ( MySQL -> PostgreSQL로 바꿔도 금방 테이블 생성 가능.) ORM의 단점 ORM으로만 완벽한 서비스를 구현할 수 없다. 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다. 프로젝트의 복잡성이 크면 구현하는 난이도가 상승한다. N + 1 Problem django ORM은 Lazy-Loading 방식 ORM에서 명령을 실행할 때마다 데이터베이스에서 데..

[Codeforce][Python] #702 G. Old Floppy Drive

이거 cycle을 산출하는 공식이 이해가 안됨. 이번주 내로 해결할 예정 import sys input = sys.stdin.readline from bisect import bisect_left # 풀이 참고했는데 for test in range(int(input())): n, m = map(int, input().split()) arr = list(map(int, input().split())) prefix_sum, idxes, idx, total = [], [], 0, 0 for num in arr: total += num if not prefix_sum or prefix_sum[-1] < total: prefix_sum.append(total) idxes.append(idx) idx += 1 x ..

[Codeforce][Python] #702 F. Equalize the Array

Counter map을 만든 후 set에 조사할 count들을 모은 후 순회하며 그 cnt보다 크면 cnt에 맞춰주고 작으면 0에 맞춰주는 식으로 풀었습니다. import sys input = sys.stdin.readline from collections import defaultdict for test in range(int(input())): n = int(input()) arr = list(map(int, input().split())) counter = defaultdict(int) for num in arr: counter[num] += 1 candidate = set() for target in counter.values(): candidate.add(target) answer = float..

[Codeforce][Python] #702 D. Permutation Transformation

분할시키면서 실제 subtree도 분할시켰습니다. import sys input = sys.stdin.readline def make_tree(depth, a): if not a: return a max_num = 0 for idx, num in enumerate(a): if max_num < num: max_idx = idx max_num = num answer[dic[max_num]] = depth make_tree(depth+1, a[:max_idx]) make_tree(depth+1, a[max_idx+1:]) for test in range(int(input())): n = int(input()) arr = list(map(int, input().split())) dic = {num: idx f..

[Codeforce][Python] #702 E. Accidental Victory

heap으로 값이 작은것부터 정렬 시킨 뒤 누적합과 내 값을 비교해가며 왕이될 수 있는 값을 구해갔습니다. import sys input = sys.stdin.readline from heapq import heappop, heappush for test in range(int(input())): n = int(input()) arr = list(map(int, input().split())) heap = [] for idx, num in enumerate(arr): heappush(heap, (num, idx)) total, answer = 0, [] while heap: num, idx = heappop(heap) if total >= num: answer.append(idx + 1) else: an..

[Codeforce][Python] #702 B. Balanced Remainders

카운팅 해준 후 넘치는거 모자란곳에 계속 옮겨줬습니다. import sys input = sys.stdin.readline def check(d): pivot = d[0] for i in range(1, 3): if d[i] != pivot: return True return False def move(over, d): global answer for i in range(3): if not over and d[i] > n // 3: pivot = d[i] - (n // 3) over.append((i, pivot)) d[i] -= pivot elif over and d[i] < n // 3: idx, num = over.pop() if idx < i: dist = num * (i - idx) else: ..