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;
}
}
간단한 문제였는데 구현하는 과정에서 시간이 오래 걸렸던 문제. 시간을 단축하기 위해서는 다음과 같은 조건들을 고려해주어야 한다.
- 5의 배수가 아니라면
continue
- 숫자의 각 자리를 확인하면서 0이나 5가 아니라면 check을
false
로 바꿈.break
을 통해 시간 절약 - 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;
}
}