[작성일: 2023. 10. 11]
풀이
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int l, int r) {
List<Integer> list = new ArrayList<>();
for (int i = l; i <= r; i++) {
int num = i;
boolean isValid = true;
while (num > 0) {
int digit = num % 10;
if (digit != 0 && digit != 5) {
isValid = false;
break;
}
num /= 10;
}
if (isValid) {
list.add(i);
}
}
if (list.isEmpty()) {
return new int[]{-1};
}
int[] answer = new int[list.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = list.get(i);
}
return answer;
}
}
digit라는 변수를 만들어 while 반복문에서 모든 자리수를 확인하게 만들었다.
예를 들어 num이 105일 때, 첫 번째 반복에서 105%10은 5이므로 일의 자리는 5가 된다. 5는 문제의 조건에 부합하므로 다음 단계로 넘어간다.
num을 10으로 나누어 num은 이제 10이 되고, 10%10은 0이므로 십의 자리도 조건에 부합한다.
num을 다시 10으로 나누면 num은 1이 되고, 1%10은 1이므로 조건에 부합하지 않아 isValid는 false를 반환하게 된다.
이런 식으로 i의 모든 자릿수를 확인해서 5와 0만 존재할 경우 true, 아닐 경우 false를 반환하고 true인 경우에만 list에 i를 추가한다.
list가 비어있을 경우에는 만족하는 조건이 없으므로 -1을 반환하고, 그게 아니라면 answer를 반환한다.