새소식

코딩테스트/프로그래머스

[C++] 마법의 엘리베이터

  • -

[문제]

코딩테스트 연습 - 마법의 엘리베이터 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 풀이]

해당 문제는 5를 기준으로 파악을 하면 생각보다 쉽게 답을 알 수 있는 문제다.

해당 문제에서 고려해야 하는것은 총 3가지 경우가 있는데

 

1. 만일 해당 숫자가 5를 넘어선다면 (6,7,8,9) 해당 숫자에 1의 값을 추가로 해주고 위의 값도 1개를 더해주자. answer에는 이때 10에서 해당 값을 뺀 숫자를 더해주자.

2. 만일 숫자가 5이상이고 해당 숫자의 앞의 자리 숫자도 5 이상의 수라면 해당 숫자에 1을 더해줘서 10으로 만들고 앞의 자리도 1을 더해주는것이 더 빠른 길이다. ex) 95라면 답은 6이 나온다. 95 => 5를 더해줘서 100을 만들고 100을 빼면 총 6번만에 답이 나옴.

3. 만일 숫자가 해당 조건을 만족 안하는 5 이하라면 (0,1,2,3,4,5) 단순히 해당 값을 빼면 되니 answer에 해당 값을 저장해주자.

[회고]

2번째 조건을 생각하는게 쉽지 않았던 문제이지만 반대로 생각해보면 해당 조건만 생각하면 문제 자체는 쉽게 풀리는 문제였다.

조건에 언제나 주의하도록 하자.

[코드]

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int solution(int storey) {
    int answer = 0;
    
    string num;
    num = to_string(storey);
    
    for(int i = num.size() - 1;i >= 1;i--){
        if(num[i] > '5'){
            int temp = num[i] - '0';
            temp = 10 - temp;
            answer += temp;
            num[i] = '0';
            num[i - 1]++;            
        }        
        else if(num[i] >= '5' && num[i - 1] >= '5'){
            int temp = num[i] - '0';
            temp = 10 - temp;
            answer += temp;
            num[i] = '0';
            num[i - 1]++;
        }
        else{
            answer += num[i] - '0';
            num[i] = '0';
        }
    }
    if(num[0] > '5'){
        int temp = num[0] - '0';
        temp = 10 - temp;
        answer += temp;
        answer++;
    }
    else{
        answer += num[0] - '0';
    }
    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[C++] 디펜스 게임  (0) 2023.05.03
[C++] 숫자 변환하기  (0) 2023.05.02
[C++] 뒤에 있는 큰 수 찾기  (0) 2023.04.30
[C++] 입국심사  (0) 2023.04.23
[C++] 혼자서 하는 틱택토  (0) 2023.04.14
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.