Algorithm/SW Expert Academy 78

[Python] 5251. 최소이동거리

import heapq tc = int(input()) for idx in range(1, tc+1): n, e = map(int, input().split())# 노드의 개수 n, 간선의 개수 e temp = [list(map(int, input().split())) for i in range(e)]# 출발노드, 도착노드, 가중치 받아오기 dist = [999999999 for i in range(n+1)]# 모든 노드 가중치 무한대로 초기화 visited = [[] for i in range(n+1)]# 인접 리스트 만들기 for i in temp: visited[i[0]].append([i[1], i[2]])# 단방향, 가중치와 함께 저장한다. que = [] heapq.heappush(que, [..

[Python] 2814. 최장경로

def dfs(node, cnt): global answer if answer < cnt: # 더 많은 경로 갔다면 갱신 answer = cnt for next in adj[node]: # node와 연결된 노드 중에 if visited[next]: # 방문한적 있다면 패스 continue visited[node] = True # 방문처리 dfs(next, cnt+1) # 다음노드로 가 visited[next] = False # 방문처리 해제 tc = int(input()) for idx in range(1, tc+1): n, m = map(int, input().split()) adj = [[] for _ in range(n+1)] # 인접 리스트 for _ in range(m): x, y = map(..

[Python] 1952. 수영장

tc = int(input()) for idx in range(1, tc+1): charge = list(map(int, input().split())) # 1일, 1달, 3달, 1년 plan = list(map(int, input().split())) # 1월부터 12월까지의 이용 계획 dp = [0 for _ in range(12)] for i in range(12): dp[i] = dp[i-1] + min(plan[i] * charge[0], charge[1]) # 이전 달의 요금 + (1일 이용권으로 계산 vs 1달 이용권으로 계산) if i > 1: # 3달 이상 됐다면 dp[i] = min(dp[i], dp[i-3] + charge[2]) # 3달 이용권으로 할까 말까 print('#{} {}..

[Python] 4012. 요리사

1. 조합을 직접 구현하여 해결한 풀이 # 조합 구하기 def combination(idx, cnt, a_arr): if cnt == n//2: # 식재료 다 골랐다면 cal_diff(a_arr) # 두 음식의 맛 차이 구하러 고고 return for i in range(idx, n): combination(i+1, cnt+1, a_arr+[i]) # 다음 번호 구해 [0, 1, 2] -> [0, 1, 3] -> [0, 1, 4] # a, b 음식 맛 차이 구하기 def cal_diff(a_arr): global answer a, b = 0, 0 b_arr = [i for i in range(n) if i not in a_arr] # a 음식에서 선택하지 않은 식재료 선택 for i in range(n/..