DP 5

[Python | 프로그래머스 | Lv_2] 땅따먹기

😉 아이디어1. 동적 프로그래밍 처리 문제2. 현 Row의 인덱스를 기준으로 이전 Row와 합산이 가능한 경우의 수 중 최대 산출3. 현재 Row의 값에 반영하고 다음 행 진행😉 풀이def getValue(prevRow, currentValue, blockedIndex): # 이전에 사용한 인덱스 외 모든 경우의 수 비교 maxValue = -1 #print('prevRow', prevRow) for i in range(len(prevRow)): if i == blockedIndex: continue prevValue = prevRow[i] maxValue = max(maxValue, prevValue + currentVa..

알고리즘 2024.07.17

[Python | 프로그래머스 | Lv_2] 2 x n 타일링

😉 아이디어1. 특이케이스 생성에 집중 👉 n > 2 이상부터는 특이케이스 없음 2. n = 1 or 2의 특이케이스로 점화식 생성😉 풀이def solution(n): answer = 0 # n = 1 -> 1 (1) # n = 2 -> 2 (1) # n = 3 -> 3 (0) # n = 4 -> f(3) * 1 + f(2) * 1 + f(1) * 0 # n = 5 -> f(4) * 1 + f(3) * 1 + f(2) * 0 + f(1) * 0 # 패턴: [0, 1, 1, 0, 0, ...] dp = [0, 1, 2, 3] pattern = [0, 1, 1, 0, 1, 0] isZero = True for i in range(4, n + 6): val = (dp[i - 1] + dp[i -..

알고리즘 2024.05.29

[Python | 프로그래머스 | Lv_3] 아방가르드 타일링

😉 아이디어1. n이 7미만일 경우까지 각 특수한 조합 개수 확인 👉 [1, 2, 5, 2, 2, 4]반복됨2. 3의 배수로 반복되고 있으므로f(n + 3) - f(n)를 통해 f(n)의 점화식 계산😉 풀이 def solution(n): dp = [0] * (n + 10) dp[1] = 1 dp[2] = 3 dp[3] = 10 MOD = 1_000_000_007 # n이 6 이하인 경우 저장 for i in range(4, n + 1): if i == 4: dp[i] = dp[i - 1] + dp[i - 2] * 2 + dp[i - 3] * 5 + 2 elif i == 5: ..

알고리즘 2024.05.11