[문제]
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
[Algorithm]
l 과 r 사이의 정수를 문자로 변환하여 for문을 통해 '0'과 '5'와의 일치 여부를 확인하고,
일치하지 않으면 valid 값을 false로 바꿔 결과 배열에 추가하지 않도록 만든다
[Code]
import java.util.*;
class Solution {
public int[] solution(int l, int r) {
List<Integer> result = new ArrayList<>();
for(int i = l; i <= r; i++) {
String numStr = String.valueOf(i);
boolean valid = true;
for(char c : numStr.toCharArray()) {
if(c != '0' && c != '5') {
valid = false;
break;
}
}
if(valid) {
result.add(i);
}
}
if(result.isEmpty()) {
return new int[]{-1};
}
return result.stream().mapToInt(Integer::intValue).toArray();
}
}
[+ 다른 사람 풀이]
import java.util.ArrayList;
class Solution {
public int[] solution(int l, int r) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i < 64; i++) {
int num = Integer.parseInt(Integer.toBinaryString(i)) * 5;
if (l <= num && num <= r)
list.add(num);
}
return list.isEmpty() ? new int[] { -1 } : list.stream().mapToInt(i -> i).toArray();
}
}
2진수 표현법을 활용한 반복문 풀이 (64는 2진수로 표현할 수 있는 최대 숫자의 범위)