대외교육/코딩테스트

[프로그래머스][C++][코딩기초트레이닝] (자리수 나머지 판정으로) 배열만들기2

흑요석s 2023. 10. 5. 18:03

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int l, int r) {
    vector<int> answer;
    int temp;
    int a;
    for(int i =l; i<=r; i++){
        temp = i;
        a=1;
        while(temp>0){
            if(temp%10 != 5 && temp%10 != 0){
                a=0;
                break;
            }
            temp /= 10;
        }
        if(a) answer.push_back(i);
    }
    if(answer.size()==0) answer.push_back(-1);
    return answer;
}
  • 이 함수는 주어진 정수가 "0"과 "5"만으로 이루어져 있는지 확인하는 역할을 합니다.
  • 주어진 정수 n의 각 자릿수를 확인하기 위해, n이 0이 될 때까지 반복문을 실행합니다.
  • n % 10 연산은 n의 가장 낮은 자릿수 (즉, 일의 자리)의 숫자를 반환합니다.
  • 해당 자릿수가 "0" 또는 "5"가 아니라면, false를 반환하여 해당 숫자가 조건을 만족하지 않음을 나타냅니다.
  • n /= 10 연산은 n의 가장 낮은 자릿수를 제거합니다. 이를 통해 다음 반복에서는 다음 자릿수를 검사하게 됩니다.
  • n의 모든 자릿수가 "0" 또는 "5"로만 이루어져 있다면, true를 반환합니다.

 

  1. l=5부터 시작해서 r=555까지 모든 정수에 대해서 "0"과 "5"만으로 이루어진 숫자인지 확인합니다.
  2. 숫자 5를 확인:
    • 5 % 10은 5이므로, "0" 또는 "5"입니다.
    • 5 / 10을 통해 다음 자릿수로 넘어갑니다. 그 결과는 0입니다. (더 이상 확인할 자릿수가 없습니다.)
    • 5는 "0"과 "5"만으로 이루어진 숫자입니다.
    • 결과 리스트에 5를 추가합니다.
  3. 숫자 6부터 숫자 49까지는 "0"과 "5"만으로 이루어지지 않았으므로 건너뜁니다.
  4. 숫자 50을 확인:
    • 50 % 10은 0이므로, "0" 또는 "5"입니다.
    • 50 / 10의 결과는 5입니다. 다시 5의 자릿수를 확인합니다.
    • 5 % 10은 5입니다.
    • 5 / 10을 통해 다음 자릿수로 넘어갑니다. 그 결과는 0입니다. (더 이상 확인할 자릿수가 없습니다.)
    • 50은 "0"과 "5"만으로 이루어진 숫자입니다.
    • 결과 리스트에 50를 추가합니다.

이러한 방식으로 l부터 r까지의 모든 숫자를 확인합니다. "0"과 "5"만으로 이루어진 숫자를 결과 리스트에 추가합니다.

최종적으로, 위의 알고리즘을 통해 l=5 및 r=555에 대해 결과 리스트는 [5, 50, 55, 500, 505, 550, 555]가 됩니다.