practivceAlgorithm/백준 379

[백준][Python] 1637 날카로운 눈

적 / 부. target이하의 값들의 합이 홀수냐? 짝수냐? 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[i][2]) + 1 return total N = int(input()) arr = [list(map(int, input().split())) for _ in range(N)] left = 0 right = 2147483648 while left < right: mid = (left + right)//2 if not get_sum(mid)&1: left = ..

[백준][Python] 6568 귀도 반 로썸은 크리스마스날 심심하다고 파이썬을 만들었다.

비트문제라기엔 EOF출력이 더 어려웠다.. import sys input = sys.stdin.readline while True: memory = [0 for _ in range(32)] cal = 0 pc = 0 for i in range(32): try: memory[i] = int(input().rstrip(),2) except EOFError: exit() while True: adress = memory[pc] cmd = adress//32 value = adress%32 pc = (pc + 1)%32 if cmd == 0: memory[value] = cal elif cmd == 1: cal = memory[value] elif cmd == 2: if not cal: pc = value el..

[백준][Python] 1507 궁금한 민호

플로이드 워셜. 최솟값이 최솟값끼리의 합이면 0 (direct한 경로가 아니라는 뜻) 최솟값끼리의 합보다 주어진 값이 크면? 최솟값이 아니라는 뜻. -1 출력. import sys input = sys.stdin.readline n = int(input()) matrix = [list(map(int, input().split())) for _ in range(n)] edge = [[1] * n for _ in range(n)] result = 0 for k in range(n): for i in range(n): for j in range(n): if i == j or j == k or i == k: continue # 합으로 표현되면 취하지 않는다.(그게 경로라는뜻) if matrix[i][j] == ..

[백준][Python] 16202 MST게임

사실 한번 0 출력되면 그뒤로 전부 0 출력하게끔 설계하는게 더 빠르지만 이 코드도 통과해서 그냥 냄. 크루스칼 import sys input = sys.stdin.readline def find(x): if parent[x] == x: return x parent[x] = find(parent[x]) return parent[x] def union(a,b): a = find(a) b = find(b) if level[a] >= level[b]: parent[b] = a if level[a] == level[b]: level[a] += 1 else: parent[a] = b N, M, K = map(int, input().split()) edges = [] for i in range(1,M+1): a, ..

[백준][Python] 10000 원 영역

라인 스위핑. 큰걸 기준으로 작은걸 감싸냐 안감싸냐 왼쪽이 겹치면 재귀로 오른쪽 이 겹쳐지는 원이 나올때까지 재귀(큰 원 안에 원이 몇개 겹치나 조사하기 위함) import sys from bisect import bisect_left input = sys.stdin.readline sys.setrecursionlimit(400000) def next_circle(cur_c,next_c): global cnt if circles[cur_c][1] == circles[next_c][1]: cnt += 1 return tmp = bisect_left(circles,(circles[next_c][1],)) if tmp == len(circles): return if circles[tmp][0]==circles..