앎을 경계하기

Programming 67

백준 #1561 - 놀이 공원

N, M = map(int, input().split(' ')) arr = list(map(int, input().split(' '))) low = 0 high = 2000000000*30 #가장 오래걸리는 경우 최대 인원이 최대 시간 놀이기구 타는 경우 c = 0 time = 0 # 마지막 친구가 언제 탔는지 시간 먼저 계산해야함 while low=N: #애들이 너무 많음 time = mid high = mid-1 else: #애들 늘려야함 low = mid+1 # 마지막 친구가 자기 시간에 탄 놀이기구 번호를 계산해야함 # 처음엔 다 탐 ch = M for i in range(M): ch += (time-1)//arr[i]# 마지막 친구가 탄 시간 직전 시간까지 해당 놀이기구에 탔던 사람 수 알 수 ..

백준 #1890 - 점프

action = {right, down} 대신 밟은 번호만큼 움직인다. 각 번호를 밟았을때 right, down 모두 해서 마지막 goal에 닿으면 된다. goal에 닿으면 1을 return 한다. 이 값들을 누적하면 최종적으로 start에서 goal로 갈 수 있는 경로의 수를 알 수 있다. N = int(input()) board = [list(map(int, input().split(' '))) for _ in range(N)] memo = [[0 for _ in range(N)]for _ in range(N)] def dp(board, memo, i, j): if i>=N or j>=N: return 0 if i

백준 #2579 - 계단 오르기

DP로 푸는 문제 DP는 메모이제이션이라고 생각하고 풀면 쉽게 풀 수 있다. 이전스텝에서 현재스텝일때 계단의 가치를 메모이제이션 해두면 연산을 여러번 안해도 되기 때문에 수행시간을 줄일 수 있다. def dp(memo, prev, now, steps): if now == 0: # 시작은 계단으로 안친다. return 0 if steps == 3: # 연속 세 개 밟을 수 없음 return 0 if memo[prev][now]: # 이미 계산한 것이라면 #return memo[prev][now] pass else: if now-2 >= 0: a = dp(memo, now, now-1, steps+1) b = dp(memo, now, now-2, 1) memo[prev][now] = stepVal[now-1..