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 |
Tags
- 삼성 SDS
- 삼성SDS Brightics
- 포스코 아카데미
- 노코드AI
- 팀 분석
- 개인 의료비 예측
- 모델링
- 삼성SDS Brigthics
- 혼공머신러닝딥러닝
- 직원 이직률
- 포스코 청년
- Brigthics를 이용한 분석
- Brigthics
- 삼성SDS
- 브라이틱스 서포터즈
- 브라이틱스
- Brightics
- 추천시스템
- 삼성 SDS Brigthics
- 영상제작기
- Brigthics Studio
- 혼공학습단
- Brightics Studio
- 혼공머신
- 캐글
- 데이터분석
- 직원 이직여부
- 데이터 분석
- 혼공
- Brightics를 이용한 분석
Archives
- Today
- Total
데이터사이언스 기록기📚
[백준/Python] 17484번(DP, 브루트포스)_진우의 달 여행(small) 본문
📌문제 유형
DP, 브루트포스(실버3)
📌문제
17484번: 진우의 달 여행 (Small)
첫줄에 지구와 달 사이 공간을 나타내는 행렬의 크기를 나타내는 N, M (2≤ N, M ≤ 6)이 주어진다. 다음 N줄 동안 각 행렬의 원소 값이 주어진다. 각 행렬의 원소값은 100 이하의 자연수이다.
www.acmicpc.net
📌나의 문제풀이
- 실패
n,m = map(int,input().split())
graph = []
for _ in range(n):
graph.append(list(map(int,input().split())))
def dfs(graph,x,y,ans,before): # 이전에 이동한 것 기억하기
global li
dx = [1, 1, 1] # 왼쪽 아래, 아래, 오른쪽 아래
dy = [-1, 0,1]
# (n-1번 반복 시 끝남 -> ans값 다 받아서 작은값 출력)
if x+1 == n :
li.append(ans)
return
for i in range(3):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
if before != 1:
dfs(graph,nx,ny,ans + graph[nx][ny],1)
if before != 2:
dfs(graph,nx,ny,ans + graph[nx][ny],2)
if before != 3:
dfs(graph,nx,ny,ans + graph[nx][ny],3)
result = 100 * n
for i in range(m):
li = []
dfs(graph,0,i,0,0)
if min(li) < result:
result = min(li)
print(result)
📌 다른사람의 문제풀이
- DP 이용
[백준][Python] 17484 진우의 달 여행
dp 누적으로 최소값 구해줬습니다. import sys input = sys.stdin.readline N, M = map(int, input().split()) matrix = [list(map(int, input().split())) for _ in range(N)] dp = [[[0,0,0] for _ in range(M)]] + [[[float('inf'),float('inf'),float('inf')
devlibrary00108.tistory.com
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(N)]
dp = [[[0,0,0] for _ in range(M)]] + [[[float('inf'),float('inf'),float('inf')] for _ in range(M)] for _ in range(N)]
for i in range(1,N+1):
for j in range(M):
# 바로 위, 오른쪽 위에 값만 비교(왼쪽 위의 값 없음)
if j < M-1:
dp[i][j][0] = min(dp[i-1][j+1][1],dp[i-1][j+1][2]) + matrix[i-1][j]
# 바로 위, 왼쪽 위에 값만 비교(오른쪽 위의 값 없음)
if 0 < j:
dp[i][j][2] = min(dp[i-1][j-1][1],dp[i-1][j-1][0]) + matrix[i-1][j]
# 전체 값 비교 가능
dp[i][j][1] = min(dp[i-1][j][0],dp[i-1][j][2]) + matrix[i-1][j]
min_value = float('inf')
for row in dp[i]:
for each in row:
min_value = min(min_value,each)
print(min_value)
📌 리뷰
- 이전의 값 중 최소값을 가져오는 경우 → DP도 생각해보기
728x90
'Coding Test > 백준(Python)' 카테고리의 다른 글
[백준/Python] 2193번(DP)_이친수 (0) | 2023.04.25 |
---|---|
[백준/Python] 2852번(구현, 문자열)_NBA 농구 (0) | 2023.04.25 |
[백준/Python] 2178번(BFS)_미로 탐색 (0) | 2023.04.20 |
[백준/Python] 20115번(그리디)_에너지 드링크 (0) | 2023.04.20 |
[백준/Python] 14248번(BFS)_점프 점프 (0) | 2023.04.20 |
Comments