Algorithm/Baekjoon 54

[Python] 2805. 나무 자르기

n, m = map(int, input().split()) # 나무의 수 n, 나무의 길이 m tree_h = list(map(int, input().split()) # 나무의 높이 s, e = 1, max(tree_h) # 시작 높이, 끝 높이 while s = mid: # mid보다 큰 나무라면 자르기 temp += tree - mid # temp == m: break 하면 안됨. 절단기의 높이를 더 높일 수 있기 때문 if temp >= m: # 목표 나무 길이보다 크다면 절단기 높이기 s = mid + 1 else: # 목표 나무 길이보다 작다면 절단기 낮추기 e = mid - 1 print(e)

Algorithm/Baekjoon 2021.12.16

[Python] 9251. LCS

seq1 = input() # 문자열 1 seq2 = input() # 문자열 2 seq_l1 = len(seq1) + 1 # 1번 문자열의 길이 seq_l2 = len(seq2) + 1 # 2번 문자열의 길이 dp = [[0 for _ in range(seq_l2)] for _ in range(seq_l1)] for i in range(1, seq_l1): # dp 배열 행열에 맞춰서(seq1-행, seq2-열) for문 선언 for j in range(1, seq_l2): if seq1[i-1] == seq2[j-1]: # 가장 최근에 추가된 글자가 같다면 dp[i][j] = dp[i-1][j-1] + 1 # 글자가 추가되기 전, 최대 길이 + 1 else: # 다르다면 dp[i][j] = max(d..

Algorithm/Baekjoon 2021.12.16

[Python] 12865. 평범한 배낭

n, k = map(int, input().split()) # 물품의 수 n, 버틸 수 있는 무게 k arr = [[0, 0]] + [list(map(int, input().split())) for _ in range(n)] # [물건의 무게, 물건의 가치] dp = [[0 for _ in range(k+1)] for _ in range(n+1)] for i in range(1, n+1): w = arr[i][0] # 현재 물건의 무게 v = arr[i][1] # 현재 물건의 가치 for j in range(1, k+1): if j < w: # 무게 j보다 현재 물건의 무게가 더 무겁다면 dp[i][j] = dp[i-1][j] # 바로 이전 물건, 같은 무게로 채우기 else: # 무게 j보다 현재 물건..

Algorithm/Baekjoon 2021.12.16

[Python] 2776. 암기왕

def binary_search(t_num): s = 0 # 시작, 마지막 포인트 초기화 e = n1 - 1 while s t_num: # 중간지점 값이 목표 숫자보다 크다면 e = m - 1 # 시작 ~ 중간 범위 설정 else: # 중간지점 값이 목표 숫자보다 작다면 s = m + 1 # 중간 ~ 끝 범위 설정 return 0 # 수첩 1에 숫자 없는 경우 tc = int(input()) for _ in range(tc): n1 = int(input()) # 수첩 1에 적어놓은 정수의 개수 number1 = sorted(set(map(int, input().split()))) # 수첩 1에 적힌 숫자들 n1 = len(number1) n2 = int(input()) # 수첩 2에 적어놓은 정수의 개수..

Algorithm/Baekjoon 2021.10.20

[Python] 2589. 보물섬

from collections import deque # 상 하 좌 우 dy = [-1, 1, 0, 0] dx = [0, 0, -1, 1] def bfs(sy, sx, hour): queue = deque([(sy, sx, hour)]) # 시작지점 추가하고 시작 visited = [[0 for _ in range(garo)] for _ in range(sero)] # 방문한 곳 다시 방문하지 못하도록 만든 리스트 visited[sy][sx] = 1 # 시작지점 방문처리 while queue: y, x, hour = queue.popleft() # 좌표 하나 가져오기 for i in range(4): ny = y + dy[i] nx = x + dx[i] if 0

Algorithm/Baekjoon 2021.10.19

[Python] 9495. 스티커

tc = int(input()) for _ in range(tc): n = int(input()) # 한 라인의 스티커 개수 dp = [list(map(int, input().split())) for _ in range(2)] # 주어진 스티커 배열 if n > 1: dp[0][1] += dp[1][0] # 점화식에 i-2가 있기때문에 처음 값은 직접 더해준다. (현재자리의 왼쪽 대각선자리) dp[1][1] += dp[0][0] for i in range(2, n): # 선택할 수 있는 두 자리에 있는 점수 중, 큰 점수와 현재 스티커와 더해주기 dp[0][i] += max(dp[1][i-2], dp[1][i-1]) dp[1][i] += max(dp[0][i-2], dp[0][i-1]) print(max..

Algorithm/Baekjoon 2021.09.30