문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12971
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
- 1칸 띄워서 계산하는 문제이므로 개수가 3개 이하라면 그 수들 중 가장 큰 수가 정답이 됨.
- a, b, c 일 땐 a와 c도 합체가 안되므로
- dp [n]=max(s [n]+dp [n-2], dp [n], s [n]+dp [n-3] )
- 경우의 수
- 첫 번째 수부터 계산(이 경우 마지막 숫자는 빼줘야 함)
- 두 번째 수부터 계산(이 경우 마지막 숫자도 더하기 가능)
- 세 번째 수부터 계산(이 경우 마지막 숫자도 더하기 가능) -> 굳이 따로 계산할 필요 없이 1번의 경우의 수에서 마지막 수까지 다 더한 후 첫 번째 수를 빼면 됨
소스코드
from collections import deque
dx = [2,3]
def solution(s):
answer = 0
n = len(s)
if(n<=3):
return max(s)
dp = [[0]*n for i in range(2)]
dp[0][0]=s[0]
dp[1][1]=s[1]
for j in range(2):
for i in range(2,n):
for k in range(2):
num = i-dx[k]
if(num<0):
continue
dp[j][i]=max(dp[j][num]+s[i],dp[j][i])
dp[0][-1]-=s[0]
answer = max(max(dp[1]),max(dp[0]))
return answer
print(solution([14, 6, 5, 11, 3, 9, 2, 10]))
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[그리드] 섬 연결하기 (python) (1) | 2023.04.11 |
---|---|
[그래프] 가장 먼 노드 (0) | 2023.04.10 |
[2019카카오] 불량 사용자 (0) | 2023.04.07 |
[해시] 베스트 앨범 (0) | 2023.04.06 |
[연습 문제] 숫자 게임 (0) | 2023.04.05 |