2342-Dance(python)

2023. 6. 4. 19:39·알고리즘

https://www.acmicpc.net/problem/2342

문제를 읽고 먼저 메모리제이션이 떠올랐다. 

현재인덱스, 왼발, 오른발을 저장해야하기에 dp배열을 삼차배열로 만들었다.

그리고 만약 한발자국 바뀔때 두가지 case가 있을 수 있다. 왼발이 가거나 오른발이 가거나.

그때 move함수를 통해 에너지가 어느정도 소요되는지를 구하고 기존의 값에서 더해주는 점화식을 세웠다.

dp데이터에서 다음인덱스는 기존에서 왼발을 움직였을때랑 오른발움직였을때 각각을 저장해주게 됩니다,

dparray를 전부 최대치로 해놓았기 때문에 마지막 인덱스에서 왼발했던거랑 오른발했던거를 비교하여 제일 작은 값으로 출력을 해주게 되면 우리가 찾는 힘을 최소화 하는 방법이 나온다.  더 좋은방법이 있을거라 생각한다. 댓글로 알려주세요

import sys
input = sys.stdin.readline
targetlist = list(map(int,input().split(" ")))
targetnum = len(targetlist)

INF = 1e8
dp = [[[INF for _ in range(5)] for _ in range(5)] for _ in range(targetnum)]
def move(x,y):
    if(x == 0):
        return 2
    elif x==y:
        return 1
    elif abs(x-y)==2 :
        return 4
    else:
        return 3
dp[0][0][0] = 0
for i in range(targetnum-1):
    target = targetlist[i]
    for l in range(5):
        for r in range(5):
            dp[i+1][l][target] = min(dp[i][l][r]+move(r,target), dp[i+1][l][target]) # 오른발 움직이는 경우
            dp[i+1][target][r] = min(dp[i][l][r]+move(l,target), dp[i+1][target][r]) # 왼발
result = INF
for i in range(5):
    for j in range(5):
        result = min(result,dp[len(targetlist)-1][i][j])
print(result)

'알고리즘' 카테고리의 다른 글

두 큐 합 같게 만들기 - Python으로 풀이  (1) 2023.06.11
성격유형검사하기-2022kakao 코테  (3) 2023.06.10
13904과제-python  (0) 2023.06.01
백준 1644- 소수의 연속합(PYTHON)  (1) 2023.05.27
17142-python풀이  (1) 2023.05.22
'알고리즘' 카테고리의 다른 글
  • 두 큐 합 같게 만들기 - Python으로 풀이
  • 성격유형검사하기-2022kakao 코테
  • 13904과제-python
  • 백준 1644- 소수의 연속합(PYTHON)
2료일
2료일
좌충우돌 모든것을 다 정리하려고 노력하는 J가 되려고 하는 세미개발자의 블로그입니다. 편하게 보고 가세요
  • 2료일
    GPT에게서 살아남기
    2료일
  • 전체
    오늘
    어제
    • 분류 전체보기 (124) N
      • SWIFT개발 (29)
      • 알고리즘 (25)
      • Design (6)
      • ARkit (1)
      • 면접준비 (32) N
      • UIkit (3) N
      • Vapor-Server with swift (3)
      • 디자인패턴 (5)
      • 반응형프로그래밍 (12)
      • CS (3)
      • 도서관 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
2료일
2342-Dance(python)
상단으로

티스토리툴바