Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
Tags
- ansible
- 프로그래머스
- Flask
- monorepo
- queue
- React
- frontend
- jenkins
- turbo
- 파이썬
- python
- javascript
- typescript
- Infra
- DP
- modbus
- dfs
- Algorithm
- AI
- javascirpt
- rag
- LLM
- 알고리즘
- BFS
- Two Pointer
- VectoreStore
- docker
- CI/CD
- build
- RDP
Archives
- Today
- Total
DM Log
[DP] 땅따먹기 - Python 본문
문제 링크 - https://school.programmers.co.kr/learn/courses/30/lessons/12913
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[문제 간단 요약]
1. 주어진 배열을 한 행씩 선택, 연속으로 같은 열 선택 불가
2. 최종적으로 누적된 숫자의 합이 최대가 되도록 하는 문제
[문제 해결 방안]
✅ DP(동적 계획법) 문제
- 각 칸에서 이전 행의 같은 열을 제외한 나머지 열 중 최댓값을 선택해 더하는 방식
[문제 해결 코드] - 초기 코드
- 시간 복잡도: O(N)
- 공간 복잡도: O(N) (DP 배열 별도 사용)
def solution(land):
answer = 0
dp_map = [[0]*4 for _ in land]
for i in range(4):
dp_map[0][i] = land[0][i]
for depth in range(1, len(land)):
for k in range(4):
for idx in range(4):
if k == idx: continue
dp_map[depth][k] = max(dp_map[depth][k],dp_map[depth-1][idx] + land[depth][k])
return max(dp_map[-1])
[문제 해결 코드] - 개선 코드
- 시간 복잡도: O(N)
- 공간 복잡도: O(1) (기존 배열 활용)
def solution(land):
for i in range(1, len(land)):
for j in range(4):
land[i][j] += max(land[i-1][:j] + land[i-1][j+1:])
return max(land[-1])
[코드 개선점]
초기 코드의 문제점
- 별도의 DP 배열(dp_map)을 사용해 메모리 공간이 추가 필요
- 중첩 반복문이 코드가 복잡하고 이해하기 어려움
개선된 코드의 장점
- 원본 배열을 직접 수정하여 메모리 효율성이 개선
- 중첩 반복문을 2중으로 간소화하여 가독성 증가
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [슬라이딩 윈도우] 연속된 부분 수열의 합 - Python / JavaScript (1) | 2025.08.23 |
|---|---|
| [스택/큐] 다리를 지나는 트럭 - Python / JavaScript (4) | 2025.08.10 |
| [Summer/Winter Coding(~2018)] 방문 길이 - Python / JavaScript (1) | 2025.07.20 |
| [완전탐색] 모음사전 - Python / JavaScript (0) | 2025.07.19 |
| [DFS/BFS] 타겟 넘버 - Python / Javascript (1) | 2025.07.15 |