목록baekjoon (60)
컴공생의 다이어리

백준 1916번 : 최소비용 구하기 (문제 바로가기) 내 코드 import sys, heapq from collections import defaultdict input = sys.stdin.readline INF = int(1e9) n = int(input()) # 도시의 개수 m = int(input()) # 버스의 개수 graph = defaultdict(list) # 버스 정보 for _ in range(m): s, e, c = map(int, input().split()) graph[s].append((e, c)) start, end = map(int, input().split()) # 출발점과 도착점 도시번호 distance = [INF] * (n + 1) queue = [] heapq.hea..

백준 9421번 : 소수상근수 (문제 바로가기) 내 코드 from collections import defaultdict def get_prime(num): # 1부터 num까지의 범위에서 소수 찾아서 리스트로 반환 prime = [False, False] + [True] * (num - 1) for i in range(2, int(num ** 0.5) + 1): if not prime[i]: continue j = 2 while i * j = 1 and answer & visited[temp]): # 제곱의 합이 1이거나 이 합이 소수상근수가 되는 결과라면 answer.add(p) visited[temp].add(p) break elif len(visited[temp]) >= 1 and not (ans..

백준 16398번 : 행성 연결 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline def find_parent(parent, x): # 부모 노드 찾기 if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union(parent, a, b): # 집합 합치기 a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b n = int(input()) # 행성의 수 arr = [list(map(int, input().split())) for _ in rang..

백준 2512번 : 예산 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline n = int(input()) # 지방의 수 arr = list(map(int, input().split())) # 예산 요청 m = int(input()) # 총 예산 start, end = 0, max(arr) while start = mid: # 요청한 금액이 상한액 이상이라면 curr += mid # 상한액 더하기 else: # 상한액 미만이라면 curr += i # 요청한 금액 더하기 if curr

백준 2015번 : 수들의 합 4 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline n, k = map(int, input().split()) arr = list(map(int, input().split())) # 배열 데이터 sum_dict = {0: 1} # 누적합 관련 dict sum_val = 0 # 누적합 answer = 0 # 합이 K인 부분합의 개수 for i in arr: sum_val += i if sum_val - k in sum_dict.keys(): # 현재까지의 누적합에서 k를 뺀 값이 sum_dict에 있다면 answer += sum_dict[sum_val - k] # answer에 해당하는 값의 value만큼 더하기 # sum_dic..

백준 17352번 : 여러분의 다리가 되어 드리겠습니다! (문제 바로가기) 내 코드 import sys input = sys.stdin.readline def find_parent(parent, x): # 이어진 섬의 대표 섬 찾기 if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union(parent, a, b): # 섬 잇기 a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b n = int(input()) # 섬의 수 parent = [i for i in range(n + 1)] ..

백준 1654번 : 랜선 자르기 (문제 바로가기) 내 코드 import sys input = sys.stdin.readline # k : 이미 가지고 있는 랜선의 개수, n : 필요한 랜선의 개수 k, n = map(int, input().split()) lan_cable = [int(input()) for _ in range(k)] answer = 0 # 랜선의 최대 길이 start, end = 1, max(lan_cable) while start = n: # 랜선의 개수가 n이상이면 start = mid + 1 answer = mid else: # 랜선의 개수가 n미만이면 end = mid - 1 print(answer)

백준 12761번 : 돌다리 (문제 바로가기) 내 코드 from collections import deque # a, b : 스카이 콩콩의 힘 # n : 동규의 현재 위치 # m : 주미의 현재 위치 a, b, n, m = map(int, input().split()) dp = dict() # 각 돌의 최소 이동 횟수 dp[n] = 0 queue = deque([n]) # n에서 시작 while queue: # bfs 수행 curr = queue.popleft() for i in {1, -1, a, -a, b, -b}: # +1칸, -1칸, +A칸, -A칸, +B칸, -B칸 이동 val = curr + i if 0

백준 14502번 : 연구소 (문제 바로가기) 내 코드 import sys from collections import deque from itertools import combinations def bfs_and_count_zero(graph, virus_pos, n, m): # 너비 우선 탐색 & 빈칸 수 구하기 directions = [(1, 0), (-1, 0), (0, 1), (0, -1)] visited = [[False] * m for _ in range(n)] for i, j in virus_pos: visited[i][j] = True queue = deque(virus_pos) while queue: # 바이러스 전파하기! x, y = queue.popleft() for i in rang..

백준 2225번 : 합분해 (문제 바로가기) 내 코드 n, k = map(int, input().split()) dp = [[0] * (k + 1) for _ in range(n + 1)] dp[0][0] = 1 for i in range(n + 1): for j in range(1, k + 1): dp[i][j] = dp[i - 1][j] + dp[i][j - 1] print(dp[n][k] % 1000000000)