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
- javascirpt
- frontend
- python
- Stack
- 파이썬
- 42587
- queue
- set활용
- 개발브로그
- 완전탐색
- data platform
- 좌표이동
- 1844
- typescript
- configfile
- modbus
- dfs
- 스택/큐
- javascript
- summerwintercoding
- algorhtim
- React
- 프로그래머스
- pymodbus
- Algorithm
- 알고리즘
- 코딩테스트
- InfluxDB
- Two Pointer
- DP
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 (0) | 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 |
[BFS] 게임 맵 최단거리 - Python (0) | 2025.07.14 |