- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12913
Lv2 문제이고, 스스로 푼 문제다!
이전에 다이나믹 프로그래밍 풀 때 접했던 문제랑 비슷했다. 그동안의 최댓값을 dp의 각 위치에 누적한 다음 마지막 행에서 최댓값을 구하면 된다
문제 이해
dp의 (i, j) 위치에는 0부터 i -1행의 수 중 j열이 아닌 값 중에서 제일 큰 값을 누적한 값이 저장되어 있다
1. 초기화로 0행에 있는 수들을 dp 행렬의 0행에 저장한다
2-1. 1행부터 시작해 land의 (i,j)의 값은 미리 dp[i][j]에 넣어준다
2-2. i -1 행의 j열을 뺀 나머지 열 중에서 최댓값을 max_num에 누적한다
3. 전 행에서의 j열을 제외한 최댓값을 dp[i][j]에 누적한다
4. dp의 마지막 행에서 최댓값을 출력해준다
- 정답 풀이 :
def solution(land):
n = len(land)
dp = [[0] * 4 for _ in range(n)]
for i in range(4):
dp[0][i] = land[0][i]
for i in range(1, n):
for j in range(4):
max_num = 0
dp[i][j] += land[i][j]
for k in range(4):
if k != j:
max_num = max(dp[i - 1][k], max_num)
dp[i][j] += max_num
return max(dp[-1])
'코딩테스트 > 기출' 카테고리의 다른 글
[2018 KAKAO BLIND RECRUITMENT / 프로그래머스] 17679번 : [1차] 프렌즈4블록 (0) | 2022.09.23 |
---|---|
[Summer/Winter Coding(~2018)/ 프로그래머스] 49993번 : 스킬트리 (0) | 2022.09.23 |
[2018 KAKAO BLIND RECRUITMENT/ 프로그래머스] 17684번 : [3차] 압축 (0) | 2022.09.21 |
[2018 KAKAO BLIND RECRUITMENT/ 프로그래머스] : [3차] n진수 게임 (0) | 2022.09.21 |
[dfs, bfs / 프로그래머스] 43175번 : 타겟 넘버 (0) | 2022.09.20 |