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 |
Tags
- 서울에서경산까지
- BOJ
- 스택
- 크로스핏
- sw expert academy
- 그리디
- 26008
- 동적프로그래밍
- 삼성
- 회전하는큐
- 재귀
- 해시해킹
- 14863
- D1
- 브루트포스
- 재귀함수
- 1로만들기2
- 15662
- 15353
- DP
- 4811
- BOJ14889
- dart
- 1781
- Flutter
- spring boot
- 백준
- C++
- Crossfit
- Python
Archives
- Today
- Total
곧죽어도 콛잉
[DP (동적 프로그래밍) / BOJ 2342 / C++] Dance Dance Revolution 본문
https://www.acmicpc.net/problem/2342
2342번: Dance Dance Revolution
입력은 지시 사항으로 이루어진다. 각각의 지시 사항은 하나의 수열로 이루어진다. 각각의 수열은 1, 2, 3, 4의 숫자들로 이루어지고, 이 숫자들은 각각의 방향을 나타낸다. 그리고 0은 수열의 마
www.acmicpc.net
이 문제도 이전에 풀었던 DP와 같은 유형!!
값을 거꾸로 타고 올라가면서 계속해서 값을 갱신해나가면 된다!
계속해서 dp 배열에 넣는 논리는 똑같은데, dp에 저장할 상태값은 현위치, 왼발위치, 오른발위치로 정의해줄 수 있다.
그리고 추가적으로 가해지는 힘이 달라지는 부분 구현은 최대한 간단한 것부터 구현해나가면 편하다.
po 함수를 유심히보자!
#include <bits/stdc++.h>
#define INF 500000;
using namespace std;
int arr[100001], N;
int dp[100001][5][5]; // 현위치 / 왼발, 오른발
int po(int from, int to){ // from 에서 to로.
if(from==to) return 1; // 같은지점 한번 더 누를 시 1.
else if(from==0) {return 2;} // 시작지점 0이면 힘은 2.
else if(abs(from-to)==2) {return 4;} // 서로 반대방향이면 3<->1, 2<->4
else {return 3;} // 그밖에 모든 경우는 3
}
int go(int level, pair<int, int> now){
if(level==N) return 0;
int &mid = dp[level][now.first][now.second];
if(mid) return mid;
mid = min(go(level+1, {arr[level], now.second}) + po(now.first, arr[level]),
go(level+1, {now.first, arr[level]}) + po(now.second, arr[level])); // 왼발 , 오른발
return mid;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
for(int i = 0 ;; i++){
cin >> arr[i];
if(arr[i]==0) {N=i; break;}
}
cout << go(0, {0,0}) << '\n';
}
'Coding Test > C++' 카테고리의 다른 글
[DP (동적 프로그래밍) / BOJ 4811 / C++] 알약 (0) | 2023.08.12 |
---|---|
[DP (동적 프로그래밍) / BOJ 12852 / C++] 1로 만들기 2 (0) | 2023.08.12 |
[DP (동적 프로그래밍) / BOJ 14863 / C++] 서울에서 경산까지 (0) | 2023.08.06 |
[LIS (가장 긴 증가하는 부분 수열) / BOJ 11053 / C++] 가장 긴 증가하는 부분 수열 (0) | 2023.08.02 |
[DP (동적 프로그래밍) / BOJ 2293 / C++] 동전 1 (0) | 2023.08.01 |
Comments