프로그래머스 배열 만들기 2 문제 바로가기

to_string()을 이용한 풀이

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int l, int r) {
    vector<int> answer;
    
    for (int i=l; i<r+1; i++){
        bool check = true;
        
        if (i%5 != 0){
            continue;
        }
        
        for (char c: to_string(i)){
            if (c!='0' && c!='5'){
                check = false;
                break;
            }
        }
        if (check){
            answer.push_back(i);
        }
    }
    
    
    if (answer.size() == 0){
        return {-1};
    } else{
        return answer;
    }
}

간단한 문제였는데 구현하는 과정에서 시간이 오래 걸렸던 문제. 시간을 단축하기 위해서는 다음과 같은 조건들을 고려해주어야 한다.

  1. 5의 배수가 아니라면 continue
  2. 숫자의 각 자리를 확인하면서 0이나 5가 아니라면 check을 false로 바꿈. break을 통해 시간 절약
  3. check이 true라면 push, false라면 그냥 지나감.

각 자리를 나눠가며 하는 풀이

위의 풀이와 거의 동일하지만 i을 10으로 나눈 몫과 나머지를 이용하는 방법도 있다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int l, int r) {
    vector<int> answer;
    
    for (int i=l; i<r+1; i++){
        bool check = true;
        
        if (i%5 != 0){
            continue;
        }
        
        for(int n=i; n>0; n/=10){
            if (n%10 != 0 && n%10 != 5){
                check = false;
                break;
            }
        }
        
        
        if (check){
            answer.push_back(i);
        }
    }
    
    
    if (answer.size() == 0){
        return {-1};
    } else{
        return answer;
    }
}