포스트

[ 프로그래머스 ] 마법의 엘리베이터

문제


https://school.programmers.co.kr/learn/courses/30/lessons/148653

풀이


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
#include <iostream>
#include <string>
#include <vector>
#include <string>
#include <stack>
#include <cmath>
#include <algorithm> 

using namespace std;

vector<int> answers = {};
vector<int> digits = {};

void recursion(int cur, int goal, int sum, int plus)
{
    if (cur == goal)
    {
        // 올림값이 있는 경우, 1번의 시도가 더 필요하다
        if (plus == 1) sum += 1;

        answers.push_back(sum);
        return;
    }

    int tmp = digits[cur] + plus;
    recursion(cur + 1, goal, sum + tmp, 0);
    recursion(cur + 1, goal, sum + (10 - tmp), 1);
}


int solution(int storey) 
{
    //storey -> 0으로 만들어야함
    // + 10^n을 최소로 사용하여 이를 해결
    //단, 현 위치 + 버튼 값 < 0 일수 없다.
    int answer = 0;

    string s = to_string(storey);
    vector<int> temp = {};

    for (int i = 0; i < s.size(); i++)
    {
        digits.push_back(s[i] - '0');
    }

    //1의 자리부터 진행하기 위해 역순 정렬
    reverse(digits.begin(), digits.end());

    //재귀를 통해 비교
    recursion(0, digits.size(),0,0);
    answer = *min_element(answers.begin(), answers.end());

    return answer;
}

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.