티스토리 뷰

728x90

문제 링크

www.acmicpc.net/problem/2342

 

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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 31
글 보관함