728x90
반응형

BaekJoon 43

[Baekjoon 12865 / python / 골드5] 평범한 배낭

import sys N, K = map(int, input().split()) # 물건 수, 버틸 수 있는 무게 item = [[]] # 물건 입력받기 (무게, 가치) for _ in range(N): item.append(list(map(int, input().split()))) dp = [[0 for _ in range(N + 1)] for _ in range(K + 1)] # dp테이블 만들기, 0행과 0열은 0으로 채우기 for x in range(1, K + 1): for y in range(1, N + 1): if x - item[y][0] >= 0: # 현재무게 - 현재물건무게 값이 0이상이라면 (dp테이블에 있다면, 담을 수 있다면) dp[x][y] = max(dp[x][y-1], dp[x..

[Baekjoon 9251 / python / 골드5] LCS

a = [[]] # dp테이블과 인덱스를 동기화하기 위해 빈 리스트를 추가한다. b = [[]] for i in list(input()): a.append(i) for i in list(input()): b.append(i) # 0행과 0열 값을 모두 0으로 맞춰준다. # 첫번째 비교부터 공식을 적용하려면 이전 값이 존재해야 하기 때문에 맞춰주는 것. dp = [[0 for _ in range(len(a))] for _ in range(len(b))] for x in range(1, len(b)): for y in range(1, len(a)): if b[x] == a[y] : # 문자열이 일치할 경우 dp[x][y] = dp[x-1][y-1] + 1 # 좌측위 방향 값에서 +1 더한 값 else: # ..

[Baekjoon 1931 / python / 실버1] 회의실 배정

# 끝나는시간으로 정렬하지 않으면 일찍 시작하고 아주 늦게 끝나는 회의에 말릴 수 있다 # 시작시간으로 정렬해야 회의목록을 순차적으로 돌면서 진행 가능하다 import sys input = sys.stdin.readline N = int(input()) # 회의 개수 talkList = [] # 회의 리스트 (시작시간, 종료시간) for _ in range(N): talkList.append(list(map(int, input().split()))) talkList.sort(key = lambda x: (x[1], x[0])) # 회의 리스트 정렬 ( 끝나는시간으로 정렬 후 시작시간으로 정렬 ) cnt = 1 # 회의개수 셀 변수 end = talkList[0][1] # 첫 회의 끝나는시간을 미리 초기화..

Algorithm/Greedy 2024.04.06

[Baekjoon 9084 / python / 골드5] 동전

import sys input = sys.stdin.readline T = int(input()) # 테스트 케이스 개수 for _ in range(T): # 테스트 케이스 개수만큼 진행한다 N = int(input()) # 동전 종류 개수 coinBox = list(map(int, input().split())) # 동전 입력받기 coinBox.insert(0, 0) # 0번 인덱스에 0넣기. 첫번째 동전부터 점화식을 적용하기 위함. money = int(input()) dp = [[0] * (money + 1) for i in range(N + 1)] # 목표금액만큼 한 행을 길게, 동전갯수만큼 한 열을 길게 for i in range(N + 1): dp[i][0] = 1 # 동전이 뭐든 간에 0을 ..

[Baekjoon 1904 / python / 실버3] 01타일

x = int(input()) d = [0] * (x + 2) d[1] = 1 d[2] = 2 for i in range(3, x + 1): d[i] = (d[i-1] + d[i-2]) % 15746 print(d[x]) 다이나믹 프로그래밍 문제이다. 점화식만 찾으면 아주 간단하게 해결할 수 있다. 계산값을 저장해둘 DP테이블(리스트 d)를 생성하고, 초기값을 넣어준다. d[1]엔 1길이의 수열에서 나올 수 있는 경우의 수의 개수, d[2]엔 2길이, d[x]엔 x길이의 수열에서 나올 수 있는 경우의 수의 개수가 들어간다. 타일 경우의 수를 구하는 것은 언뜻 답이 없어 보이지만, 규칙이 있다. 현재 값들에 1을 붙이고, 이전 값들에 00을 붙이면 그게 다음 값이 된다. 즉 N=4 일 때의 경우의 수를 구..

[Baekjoon 3055 / python / 골드4] 탈출

# 도치가 사방으로 가는 것과, 물이 도치의 방문목록에 영향을 받는 것(도치가 지나간 길 안가는것)은 결과에 영향을 미치지 않는다. import sys from collections import deque input = sys.stdin.readline R, C = map(int, input().split()) # 행, 열 forest = [list(input().strip()) for _ in range(R)] visited = [[-1] * C for _ in range(R)] # -1로 설정해두고 도치의 이동 과정을 입력할것이다 dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] queue = deque() for x in range(R): for y in range(C): if f..

Algorithm/BFS 2024.04.03

[Baekjoon 1707 / python / 골드4] 이분 그래프

import sys sys.setrecursionlimit(10 ** 9) input = sys.stdin.readline # 이분 그래프 판별 DFS 함수 def DFS(graph, start, visited, group): visited[start] = group for i in graph[start]: if visited[i] == 0: # 방문 안 한 곳이라면 result = DFS(graph, i, visited, -group) if not result: return False # 하위에서 이분 그래프 아니라고 판단했다면 함수 종료 elif visited[i] == group: # 인접노드인데 그룹이 같을경우 이분그래프 아님 return False return True # 입력받은 갯수만큼 그래..

Algorithm/Graph 2024.04.03

[Baekjoon 1197 / python / 골드4] 최소 스패닝 트리

import heapq import sys input = sys.stdin.readline N, E = map(int, input().split()) # 노드, 간선 graph = [[] for _ in range(N + 1)] # 그래프 입력받기 for _ in range(E): a, b, c = map(int, input().split()) graph[a].append((c, b)) graph[b].append((c, a)) visited = [False] * (N + 1) # 방문체크 리스트 def prim(graph, start): # 그래프, 시작노드 입력받는다, 프림 알고리즘 사용 visited[start] = True # 시작노드 방문체크 distance = 0 # 거리(가중치)를 계산할 변..

Algorithm/Graph 2024.04.03
728x90
반응형