본문 바로가기

알고리즘 (Python)/이것이 코딩 테스트다 with 파이썬 (실습)

(41)
[그래프 이론 알고리즘] 팀 결성 - 파이썬(python) 팀 결성 난이도 : 中 풀이 시간 : 20분 시간 제한 : 2초 메모리 제한 : 128 MB 해답 def find_parent(parent, x): if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union_parent(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b n, m = map(int, input().split()) parent = [0] * (n+1) for i in range(0, n+1): parent[i] = i for i in range..
[최단 경로 알고리즘] 전보 - 파이썬(python) 전보 난이도 : 上 풀이 시간 : 60분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 import heapq import sys input = sys.stdin.readline INF = 987654321 n, m, start = map(int, input().split()) graph = [[] for in range(n+1)] distance = [INF] * (n+1) for _ in range(m): x, y, z = map(int, input().split()) graph[x].append((y, z)) def dijkstra(start): q = [] heapq.heappush(q, (0, start)) distance[start] = 0 while q: dist, now = heap..
[최단 경로 알고리즘] 미래 도시 - 파이썬(python) 미래 도시 난이도 : 中 풀이 시간 : 40분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 INF = 987654321 n, m = map(int, input().split()) graph = [[INF] * (n+1) for _ in range(n+1)] for a in range(1, n+1): for b in range(1, n+1): if a == b: graph[a][b] = 0 for _ in range(m): a, b = map(int, input().split()) graph[a][b] = 1 graph[b][a] = 1 x, k = map(int, input().split()) for k in range(1, n+1): for a in range(1, n+1): for b in ..
[다이나믹 프로그래밍] 효율적인 화폐 구성 - 파이썬(python) 효율적인 화폐 구성 난이도 : 中 풀이 시간 : 30분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 n, m = map(int, input().split()) array = [] for i in range(n): array.append(int(input())) d = [99999] * (m+1) d[0] = 0 for i in range(n): for j in range(array[i], m+1): d[j] = min(d[j], d[j-array[i]] + 1) if d[m] == 99999: print(-1) else: print(d[m]) 예시 # 정수 N, M을 입력 받기 n, m = map(int, input().split()) # N개의 화폐 단위 정보를 입력 받기 array = [] ..
[다이나믹 프로그래밍] 바닥 공사 - 파이썬(python) 바닥 공사 난이도 : 中下 풀이 시간 : 20분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 n = int(input()) d = [0] * 1001 d[0] = 0 d[1] = 1 d[2] = 3 for i in range(3, n+1): d[i] = (d[i-1] + d[i-2]*2) % 796796 print(d[n]) 예시 # 정수 N을 입력 받기 n = int(input()) # 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화 d = [0] * 1001 # 다이나믹 프로그래밍(Dynamic Programming) 진행 (보텀업) d[1] = 1 d[2] = 3 for i in range(3, n + 1): d[i] = (d[i - 1] + 2 * d[i - 2]) % 796796 ..
[다이나믹 프로그래밍] 개미 전사 - 파이썬(python) 개미 전사 난이도 : 中 풀이 시간 : 30분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 n = int(input()) array = list(map(int, input().split())) d = [0] * 100 d[0] = array[0] d[1] = max(d[0], array[1]) for i in range(2, n): d[i] = max(d[i-1], d[i-2] + array[i]) print(d[n-1]) 예시 # 정수 N을 입력 받기 n = int(input()) # 모든 식량 정보 입력 받기 array = list(map(int, input().split())) # 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화 d = [0] * 100 # 다이나믹 프로그래밍(Dyna..
[다이나믹 프로그래밍] 1로 만들기 - 파이썬(python) 1로 만들기 난이도 : 中下 풀이 시간 : 20분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 x = int(input()) dp = [0] * 30001 for i in range(2 , x+1): dp[i] = dp[i-1] + 1 if i % 2 == 0: dp[i] = dp[i//2] + 1 if i % 3 == 0: dp[i] = dp[i//3] + 1 if i % 5 == 0: dp[i] = dp[i//5] + 1 print(d[x]) 예시 # 정수 X를 입력 받기 x = int(input()) # 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화 d = [0] * 1000001 # 다이나믹 프로그래밍(Dynamic Programming) 진행(보텀업) for i in range(..
[이진 탐색 알고리즘] 떡볶이 떡 만들기 - 파이썬(python) 떡볶이 떡 만들기 난이도 : 中 풀이 시간 : 40분 시간 제한 : 2초 메모리 제한 : 128 MB 해답 n, m = map(int, input().split()) array = list(map(int, input().split())) start, end = 0, max(array) while(start mid: total = total + (i - mid) if total < m: end = mid - 1 else: result = mid start = mid + 1 print(result) 예시 # 떡의 개수(N)와 요청한 떡의 길이(M)을 입력 n, m = list(map(int, input().split(' '))) # 각 떡의 개별 높이 정보를 입력 array = list(map(int, in..
[이진 탐색 알고리즘] 부품 찾기 - 파이썬(python) 부품 찾기 난이도 : 中下 풀이 시간 : 30분 시간 제한 : 1초 메모리 제한 : 128 MB 해답 def binary_search(array, target, start, end): while start target: end = mid - 1 else: start = mid + 1 return None n = int(input()) array = list(map(int, input().split())) m = int(input()) x = list(map(int, input().split())) for i in x: result = binary_search(array, i, 0, n-1) if result == None: print('no', end=' ') else: print('yes', end='..
[정렬 알고리즘] 두 배열의 원소 교체 - 파이썬(python) 두 배열의 원소 교체 난이도 : 下 풀이 시간 : 20분 시간 제한 : 2초 메모리 제한 : 128 MB 해답 n, k = map(int, input().split()) a = list(map(int, input().split())) b = list(map(int, input().split())) a.sort() b.sort(reverse=True) for i in range(k): if a[i] > b[i]: a[i], b[i] = b[i], a[i] else: break print(sum(a)) 예시 n, k = map(int, input().split()) # N과 K를 입력 받기 a = list(map(int, input().split())) # 배열 A의 모든 원소를 입력받기 b = list(m..