[2342] Dance Dance Revolution(3차원 DP)

2023. 4. 12. 01:19·Coding Test/DP
728x90
 

2342번: Dance Dance Revolution

입력은 지시 사항으로 이루어진다. 각각의 지시 사항은 하나의 수열로 이루어진다. 각각의 수열은 1, 2, 3, 4의 숫자들로 이루어지고, 이 숫자들은 각각의 방향을 나타낸다. 그리고 0은 수열의 마

www.acmicpc.net

 

분석

D[N][L][R] : N개의 수열을 수행한 후 왼발의 위치가 L, 오른발의 위치가 R일 때 최소 누적 힘

mp[i][j] : i에서 j로 이동하는데 드는 힘

  • 오른발 : D[N][L][R] = min(D[N-1][L][i] + mp[i][R])
  • 왼발 : D[N][L][R] = min(D[N-1][i][R] + mp[i][L])

 

풀이

import sys
input=sys.stdin.readline

# N개의 열, L 왼발, R 오른발
dp=[[[sys.maxsize for k in range(5)] for j in range(5)] for i in range(100001)]

"""
한 발을 이동할 때 드는 힘 미리 저장
mp[1][2] = 1에서 2로 이동할 때 드는 힘
- 같은 지점 한번 더 1
- 0에서 이동 2
- 인접 지점 3
- 반대편 4
"""
mp=[[0,2,2,2,2],
    [2,1,3,4,3],
    [2,3,1,3,4],
    [2,4,3,1,3],
    [2,3,4,3,1]]

s=1
dp[0][0][0]=0

l=list(map(int, input().split()))
idx=0

while l[idx]!=0:
    n=l[idx]

    # 오른발로 이동해 현재 다리 위치로 만들수 있는 경우의 수
    for i in range(5):
        if n==i: # 두발이 같은 자리
            continue
        for j in range(5):
            dp[s][i][n]=min(dp[s-1][i][j]+mp[j][n], dp[s][i][n])

    # 왼발로 이동해 현재 다리 위치로 만들수 있는 경우의 수
    for j in range(5):
        if n == j:  # 두발이 같은 자리
            continue
        for i in range(5):
            dp[s][n][j] = min(dp[s - 1][i][j] + mp[i][n], dp[s][n][j])

    s+=1
    idx+=1

s-=1 # 마지막 이동 횟수로 idx 조정
result=sys.maxsize

for i in range(5):
    for j in range(5):
        result=min(result, dp[s][i][j])

print(result)

 

 

 

 

728x90
저작자표시 (새창열림)
'Coding Test/DP' 카테고리의 다른 글
  • [2011] 암호코드
  • [2624] 동전 바꿔주기 (DP)
  • [1328번] 고층 빌딩 (빌딩 순서 구하기, 3차원 DP)
  • [1915번] 가장 큰 정사각형
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Algorithm
    트리
    DFS
    DP
    자료구조
    힙
    동적계획법
    월간코드챌린지
    BFS
    그리디
    덱
    그래프
    재귀
    구현
    프로그래머스
    알고리즘
    파이썬
    최대공약수
    조합
    정렬
    최소신장트리
    구간합
    스택
    이분탐색
    플로이드워셜
    큐
    최단거리
    LIS
    다익스트라
    백준
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[2342] Dance Dance Revolution(3차원 DP)
상단으로

티스토리툴바