Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[백준] 방법을 출력하지 않는 숫자 맞추기 #61

Open
hye-on opened this issue Nov 23, 2024 · 1 comment
Open

[백준] 방법을 출력하지 않는 숫자 맞추기 #61

hye-on opened this issue Nov 23, 2024 · 1 comment
Assignees
Labels

Comments

@hye-on
Copy link
Collaborator

hye-on commented Nov 23, 2024

🔗 방법을 출력하지 않는 숫자 맞추기

@hye-on hye-on added GOLD and removed PLATINUM labels Nov 25, 2024
@hye-on hye-on changed the title [백준] 자물쇠 [백준] 방법을 출력하지 않는 숫자 맞추기 Nov 25, 2024
@hye-on
Copy link
Collaborator Author

hye-on commented Nov 26, 2024

📑 댓글 템플릿

  • Language : C++
  • 성능
스크린샷 2024-11-01 15 37 42

코드 풀이

#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    // 10까지 있는 이유 : 10번 돌리나 20번 돌리나 그 이후 다이얼의 미치는 영향은 똑같다.
    // dp[i][j] = k : i번째까지 최소 회전 횟수가 k이다. 각 경우는 왼쪽으로 총 j번 돌렸을 때 
    int dp[10001][10]; 

    memset(dp, 0x3f, sizeof(dp)); //10억으로 초기화 

    int n;
    cin >> n;

    int a[10001], b[10001];
    string s, t;
    cin >> s >> t;

    //숫자로 바꾼다. 
    for (int i = 1; i <= n; i++) {
        a[i] = s[i - 1] - '0';
        b[i] = t[i - 1] - '0';
    }

    //초기화 
    for (int i = 0; i < 10; i++) {
        dp[0][i] = i;
    }

    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < 10; j++) {
            int left_cnt = (b[i] - (j + a[i]) + 20) % 10; // 0 - (9+9) 일수도 있어서 +20
            int right_cnt = (10 - left_cnt) % 10;

            dp[i][j] = min(dp[i][j], dp[i - 1][j] + right_cnt); //오른쪽으로 돌릴 경우 j는 그대로
            dp[i][(j + left_cnt) % 10] = min(
                dp[i][(j + left_cnt) % 10],
                dp[i - 1][j] + left_cnt
            );
        }
    }

    int answer = 1e9;
    for (int i = 0; i < 10; i++) {
        answer = min(answer, dp[n][i]);
    }

    cout << answer << '\n';
    return 0;
}

코멘트

- 디따 어렵네요 점화식 생각하는게 어려웠습니다.

@hye-on hye-on added the DONE label Nov 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants