일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 대학원
- 자바
- WebOS
- level3
- 대학원일기
- level4
- Python
- 어렵다
- LEVEL2
- 휴학
- 프로그래머스
- py
- D3
- git
- BFS
- Matrix Factorization
- SQL
- Github
- level1
- SWEA
- MSBuild
- 컨트리뷰톤
- 내휴학생활중의아주큰일
- 컴퓨터비전
- 안드로이드스튜디오
- 다시풀기
- java
- build
- androidstudio
- 파이썬
Archives
- Today
- Total
bit가 눈 앞에서 왔다갔다
Py) 프로그래머스 42897 도둑질 본문
https://programmers.co.kr/learn/courses/30/lessons/42897
이렇게 실패만 주르륵 뜨는 거 처음 본다. 사정없이 빨간 글자가 파바바바ㅏ박
니 코드는 볼 것도 없다ㅋ 느낌이었다.
* 틀린 코드
def solution(money):
answer = 0
steal = []
for house, amount in enumerate(money):
steal.append([house,amount])
for j in range(0, len(money)-1, 2): # 0포함
answer += steal[j][1]
tmp = 0
for j in range(1, len(money), 2): # 0 미포함
tmp += steal[j][1]
answer = tmp if answer < tmp else answer
return answer
아무래도 문제 자체를 잘못 생각한 것 같다.
* 정답 코드
def solution(money):
dp1 = [0] * len(money)
dp2 = [0] * len(money)
dp1[0] = money[0]
for i in range(1, len(money)-1): # 0을 포함
dp1[i] = max(dp1[i-2]+money[i], dp1[i-1])
dp2[0] = 0
for j in range(1, len(money)):
dp2[j] = max(dp2[j-2]+money[j], dp2[j-1])
return max(dp1[-2], dp2[-1])
단순히 0 포함 미포함만 생각하면서 홀수 짝수 더한 게 잘못된 생각이었다.
현재 돈을 훔치는 게 이익인지, 이전 돈을 훔치는게 이익인지 고려해야 했다.
dp가 약한 것 같다.
다른 것들보다 dp 풀면 음 ㅇㅇ 낯선 느낌? 집 가면.. dp를 좀 파자..
반응형
'Algorithm > Prob' 카테고리의 다른 글
SQL) 프로그래머스 59042 없어진 기록 찾기 (0) | 2022.02.22 |
---|---|
Py) 프로그래머스 49190 방의 개수 (0) | 2022.02.22 |
Py) 프로그래머스 42884 단속카메라 (0) | 2022.02.17 |
Py) 프로그래머스 42628 이중우선순위큐 (0) | 2022.02.15 |
Py) 프로그래머스 43164 여행경로 (0) | 2022.02.14 |
Comments