๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์ค€/Gold

[BOJ] 13392 : ๋ฐฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š” ์ˆซ์ž ๋งž์ถ”๊ธฐ

by Jaeguk 2022. 2. 25.
๋ฌธ์ œ ๋งํฌ

13392๋ฒˆ: ๋ฐฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š” ์ˆซ์ž ๋งž์ถ”๊ธฐ (acmicpc.net)

 

13392๋ฒˆ: ๋ฐฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š” ์ˆซ์ž ๋งž์ถ”๊ธฐ

์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด N๊ฐœ์˜ ํšŒ์ „์ด ๊ฐ€๋Šฅํ•œ ์ˆซ์ž ๋‚˜์‚ฌ๊ฐ€ ์•„๋ž˜์œ„๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ˆซ์ž๋‚˜์‚ฌ๋Š” ์ˆซ์ž๋‚˜์‚ฌ 1์ด๊ณ  ๊ฐ€์žฅ ์•„๋ž˜์— ์žˆ๋Š” ์ˆซ์ž๋‚˜์‚ฌ๋Š” ์ˆซ์ž๋‚˜์‚ฌ N์ด๋‹ค. ๋ชจ๋“  ์ˆซ์ž๋‚˜์‚ฌ๋Š” ๊ฐ๊ฐ 10

www.acmicpc.net

DP ๋ฌธ์ œ๋กœ ๊ณจ๋“œ2๋ผ๊ณ  ๋˜์–ด์žˆ์ง€๋งŒ ๋‚ด ์ฒด๊ฐ์ƒ์œผ๋กœ ์ „์— ํ’€์—ˆ๋˜ ๊ณจ๋“œ1 ๋กœ๋ด‡ ์กฐ์ข…ํ•˜๊ธฐ๋ณด๋‹ค ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค.

์˜ค๋‹ต

์ฒ˜์Œ์—๋Š” DP๋ฐฐ์—ด์„ 2์ฐจ์›๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์„œ ์ƒ๊ฐํ–ˆ๋‹ค.

DP[๋Œ๋ฆฌ๊ณ ์žˆ๋Š” ๋‚˜์‚ฌ ๋ฒˆํ˜ธ][์™ผ์ชฝ์œผ๋กœ ๋Œ๋ฆด์ง€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋Œ๋ฆด์ง€] ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ๋‹ค.

์ด์ „์— ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ ค์„œ ๋งŒ๋“ค์–ด์ง„ ํ˜„์žฌ ๋ณด๊ณ ์žˆ๋Š” ์•ž๋ฉด์ด ์žˆ์„ ๊ฒƒ์ด๊ณ , ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋Œ๋ ค์„œ ๋งŒ๋“ค์–ด์ง„

ํ˜„์žฌ ๋ณด๊ณ ์žˆ๋Š” ์•ž๋ฉด์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

1. ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ฆด๊ฑฐ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ์ด์ „์— ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ ค์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฉด์ด ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋Œ๋ ค์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฉด์ด ์žˆ๋‹ค.

์™ผ์ชฝ์œผ๋กœ ๋Œ๋ ค์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฉด์—์„œ ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ ค ์›ํ•˜๋Š” ์ˆซ์ž๋ฅผ ๋งŒ๋“ ๋‹ค. ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋Œ๋ ค์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฉด์—์„œ ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ ค ์›ํ•˜๋Š” ์ˆซ์ž๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์ค‘ ๋Œ๋ฆฐ ์ด ํšŸ์ˆ˜๊ฐ€ ์ ์€ ๊ฒฝ์šฐ๋ฅผ ํƒํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ ๋งŒ์•ฝ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ด ํšŸ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋ฐฉ๋ฒ•์€ ์•„๋‹˜์„ ๊นจ๋‹ฌ์•˜๋‹ค.

๋ช‡์‹œ๊ฐ„์„ ๊ณ ๋ฏผํ–ˆ์ง€๋งŒ ๋„์ €ํžˆ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค. ์ฐธ๊ณ ํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๋ ค๊ณ ํ•ด๋„ ์ดํ•ด๊ฐ€ ์‰ฝ์ง€์•Š์€ ๋ฌธ์ œ์˜€๋‹ค.

์ฐธ๊ณ  ๋งํฌ

https://kimcodingvv.github.io/BOJ-13392/

 

[BOJ | ๋ฐฑ์ค€] 13392๋ฒˆ: ๋ฐฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š” ์ˆซ์ž ๋งž์ถ”๊ธฐ

BOJ 13392 ๋ฐฉ๋ฒ•์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š” ์ˆซ์ž ๋งž์ถ”๊ธฐ

kimcodingvv.github.io

๊ทธ ์ค‘์—์„œ ๊ฐ€์žฅ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๋˜ ๊น€์ฝ”๋”ฉ๋‹˜์˜ ์ฝ”๋“œ๋กœ ์ดํ•ดํ•ด๋ณด๋ คํ–ˆ๋‹ค.

ํ’€์ด

๋จผ์ € i๋ฒˆ์งธ ๋‚˜์‚ฌ๋ฅผ ๋Œ๋ฆฌ๋ ค ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„๋•Œ i-1๋ฒˆ์งธ๊นŒ์ง€ ์™ผ์ชฝ์œผ๋กœ ๋ช‡ ๋ฒˆ ๋Œ๋ ธ๋ƒ๊ฐ€ i๋ฒˆ์งธ ๋‚˜์‚ฌ์˜ ์ˆซ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋Š” ์ด์ „์— ๋ช‡๋ฒˆ์„ ๋Œ๋ ธ๋“  i๋ฒˆ์งธ ์ˆซ์ž๋Š” ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. ์™ผ์ชฝ์œผ๋กœ 12๋ฒˆ์„ ๋Œ๋ฆฐ ๊ฒƒ์ด๋ž‘ ์™ผ์ชฝ์œผ๋กœ 2๋ฒˆ ๋Œ๋ฆฐ ๊ฒƒ์€ ๊ฒฐ๊ตญ ๊ฐ™์€ ์ˆซ์ž์ด๋ฏ€๋กœ ๋ชจ๋“ˆ๋Ÿฌ๋ฅผ ์ด์šฉํ•ด %10์„ ํ•ด์ค€๋‹ค.

i๋ฒˆ์งธ ๋‚˜์‚ฌ๋ฅผ ์›ํ•˜๋Š” ์ˆซ์ž๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š”

์™ผ์ชฝ์œผ๋กœ (๋งŒ๋“ค์–ด์•ผ ํ•  ์ˆซ์ž - ํ˜„์žฌ i๋ฒˆ์งธ ๋‚˜์‚ฌ์˜ ์ˆซ์ž - ์ „์— ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ฆฐ ํšŸ์ˆ˜ + 20) % 10 ๋งŒํผ ๋Œ๋ ค์•ผํ•œ๋‹ค.

+20์„ ํ•ด์ฃผ๋Š” ์ด์œ ๋Š” ๋งŒ๋“ค์–ด์•ผ ํ•  ์ˆซ์ž๊ฐ€ 0์ด๊ณ  i๋ฒˆ์งธ ๋‚˜์‚ฌ๊ฐ€ 9๋ผ๋ฉด +10๋งŒ ํ•˜๋ฉด ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜๋„์žˆ๊ธฐ ๋•Œ๋ฌธ์— +20์„ ํ•ด์„œ ์–‘์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

์™ผ์ชฝ์œผ๋กœ ๋Œ๋ ค์•ผ ํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ left ๋ผ๊ณ  ํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋Š” 10-left ๋งŒํผ ๋Œ๋ฆฌ๋ฉด ์›ํ•˜๋Š” ์ˆซ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

1. ์™ผ์ชฝ์œผ๋กœ ๋Œ๋ฆฌ๋Š” ๊ฒฝ์šฐ DP[i][(j+left) %10)] = min(DP[i][(j+left)%10], DP[i-1][j] + left) ์ด๋‹ค.

์™ผ์ชฝ์œผ๋กœ ๋Œ๋ฆฐ ์ด ํšŸ์ˆ˜๊ฐ€ j์—์„œ j+left๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค.

2. ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋Œ๋ฆฌ๋Š” ๊ฒฝ์šฐ DP[i][j] = min(DP[i][j], DP[i-1][j] + right) ์ด๋‹ค.

์™ผ์ชฝ์œผ๋กœ ๋Œ๋ฆฐ ์ด ํšŸ์ˆ˜๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋งˆ์ง€๋ง‰์—

DP[N][0~9] ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <math.h>
#include <queue>
#include <climits>
#include <algorithm>
#include <iomanip>
#include <map>
#define mod 1000000007
#define Floor 1000000000000000000
using namespace std;
typedef long long ll;
typedef priority_queue<pair<pair<intint>int>vector<pair<pair<intint>int>>, greater<pair<pair<intint>int>>> Priority_queue;
const int INF = INT_MAX;
const int MAX_N = 10000 + 5;
int N;
vector<int> num;
vector<int> goal;
int DP[MAX_N][10];
 
int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> N;
    char ch;
 
    for (int i = 1; i <= N; i++) {
        for (int j = 0; j <= 9; j++)
            DP[i][j] = INF;
    }
 
    num.push_back(0);
    for (int i = 0; i < N; i++) {
        cin >> ch;
        num.push_back(ch - '0');
    }
    goal.push_back(0);
    for (int i = 0; i < N; i++) {
        cin >> ch;
        goal.push_back(ch - '0');
    }
    for (int i = 0; i <= 9; i++) {
        DP[0][i] = i;
    }
    for (int i = 1; i <= N; i++) {
        for (int j = 0; j <= 9; j++) {
            int left = (goal[i] - num[i] - j + 20) % 10;
            int right = 10 - left;
            DP[i][j] = min(DP[i][j], DP[i - 1][j] + right);
            DP[i][(j + left) % 10= min(DP[i][(j + left) % 10], DP[i - 1][j] + left);
        }
    }
    int ans = INF;
    for (int i = 0; i <= 9; i++) {
        ans = min(ans, DP[N][i]);
    }
    cout << ans << "\n";
    return 0;
}
cs

๋…ผ๋ฆฌ๋Š” ๋ชจ๋‘ ์ดํ•ดํ–ˆ์ง€๋งŒ, ์ฒ˜์Œ์— DP[0][i] ๊ฐ’์„ ์™œ i๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ฃผ๋Š”์ง€๋Š” ์•„์ง ์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค.

DP์— ์กฐ๊ธˆ ์ž์‹ ์žˆ์–ด ์ง€๋ คํ–ˆ์ง€๋งŒ ์•„์ง ๋ฉ€์—ˆ๋‹ค๋Š” ๊ฑธ ๋‹ค์‹œ ๋А๊ผˆ๋‹ค.

728x90