- 2342-Dance(python)2023년 06월 04일
- 2료일
- 작성자
- 2023.06.04.: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으로 풀이 (0) 2023.06.11 성격유형검사하기-2022kakao 코테 (2) 2023.06.10 13904과제-python (0) 2023.06.01 백준 1644- 소수의 연속합(PYTHON) (1) 2023.05.27 17142-python풀이 (0) 2023.05.22 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)