목록Algorithms (64)
# 00 01 02 # 10 11 12 # 20 21 22 # 30 31 32 # # 최소값은 간선 한번이 최소임 # 왼쪽값: 10 = sum(01,10) # 중간값: 11 = sum(01,11) # 오른쪽값: 12 = sum(01,12) # 왼쪽값: 20 = min(sum(10,20), sum(11,20)) # 중간값: 21 = min(sum(10,21),sum(11,21),sum(12,21)) # 오른쪽값: 22 = min(sum(11,22),sum(12,22)) test_num = 1 while True: node_num = int(input()) if not node_num or node_num < 2: break # node_num을 1부터 시작하기 위해 routes = [[0]*3] + [li..
# 1번시작 2번 끝 # 일방통행 # 1~N 마을 # M 개 일방통행 도로 # return 총 경로수 # 9자리 넘으면 뒤의 9자리만 출력 # 무한대 inf - 어떻게 가능?? # 시간 초과... # 메모리 초과... from collections import defaultdict import sys sys.setrecursionlimit(10**3) # n = 노드 개수 # m = 간선 개수 n, m = map(int, input().split()) case = 0 roads = defaultdict(list) inf_ck = False # A->B for _ in range(m): a, b = map(int, input().split()) roads[a].append(b) def dfs(n): glo..
# 발전소 개수 1
from collections import defaultdict # 에러 # 루트 노드가 2개인 예외가 있을 수 있음 lst = [] while True: temp = list(map(int, input().split())) if temp: if temp[-1] == -1 and temp[-2] == -1: break else: lst.extend(temp) temp = defaultdict(list) cases = [] for i in range(0, len(lst), 2): if lst[i] == 0 and lst[i+1] == 0: cases.append(temp) temp = defaultdict(list) else: temp[lst[i+1]].append(lst[i]) for i, case in..
# BruteForce로 모든 조건 구하려 했지만 +, - 개수 부여 부분에서 막힘 from itertools import combinations n = int(input()) chu = list(map(int, input().split())) t = int(input()) target = list(map(int, input().split())) n = len(chu) for i in range(2, n+1): for j in combinations(chu, i): # + or - # 사용가능 총 부호 개수 m = len(chu)-1 for tg in target: pass # 1. 최대 무게까지 dp 만듬 # 2. 각 경우의 수에 대해 합 또는 빼기 n = int(input()) chu = list(m..
# 1. 배열판 만들기 # 2. 움직인 칸 합 # 3. 합 출력 ## 메모리 초과 n, k = map(int, input().split()) jumps = list(input()) fields = [[0]*n for _ in range(n)] # U D L R dirs = {'U': (-1, 0), 'D': (1, 0), 'L': (0, -1), 'R': (0, 1)} answer = [1] def make_zigzag_list(fields, n): cnt = 1 fields[0][0] = cnt change_dir = 0 for i in range(1, n): a = list(range(i+1)) b = list(range(i, -1, -1)) ..