티스토리 뷰
728x90
문제 링크
2342번: Dance Dance Revolution
입력은 지시 사항으로 이루어진다. 각각의 지시 사항은 하나의 수열로 이루어진다. 각각의 수열은 1, 2, 3, 4의 숫자들로 이루어지고, 이 숫자들은 각각의 방향을 나타낸다. 그리고 0은 수열의 마
www.acmicpc.net
풀이
지시 사항의 인덱스, 왼발의 위치, 오른발의 위치를 가지고 dp를 돌려줍시다.
각각 왼발을 옮겼을 때, 오른발을 옮겼을 때로 전개하며, 현재 위치와 다음 위치의 차이에 따른 값만 바꿔주며 정답에 더해주면 됩니다.
정답 코드
#include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; int d[111'111][5][5]; int p[111'111]; int n; int getVal(int now, int next){ if(now == 0) return 2; if(now == next) return 1; return 3 + (now % 2 == next % 2); } int go(int i, int l, int r) { if (i == n) return 0; int &ret = d[i][l][r]; if (ret != -1) return ret; ret = INF; int next = p[i]; ret = min(ret, go(i + 1, next, r) + getVal(l, next)); ret = min(ret, go(i + 1, l, next) + getVal(r, next)); return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); memset(d, -1, sizeof(d)); for (int i = 0; cin >> p[i], p[i] != 0; i++, n++); cout << go(0, 0, 0); }
728x90
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[BOJ] 백준 2623 음악프로그램 (0) | 2021.03.08 |
---|---|
[BOJ] 백준 2098 외판원 순회 (0) | 2021.03.08 |
[BOJ] 백준 2252 줄 세우기 (0) | 2021.03.08 |
[BOJ] 백준 2239 스도쿠 (0) | 2021.03.08 |
[BOJ] 백준 2166 다각형의 면적 (0) | 2021.03.08 |