문제
내가 작성한 정답
import java.util.*;
class Solution {
public int[] solution(int l, int r) {
ArrayList<String> answer = new ArrayList<>();
for(int i=l; i<=r; i++){
String s = String.valueOf(i);
if(s.matches("[05]+")){
answer.add(s);
}
}
if(answer.isEmpty()) answer.add("-1");
return answer.stream().mapToInt(Integer::parseInt).toArray();
}
}다른 사람들의 정답
import java.util.ArrayList;
class Solution {
public int[] solution(int l, int r) {
ArrayList<Integer> list = new ArrayList<>();
// i는 1부터 63까지 반복
// 1~63을 이진수 문자열로 바꾸고, 이 문자열을 다시 정수로 변환해 5를 곱함
for (int i = 1; i < 64; i++) {
int num = Integer.parseInt(Integer.toBinaryString(i)) * 5;
if (l <= num && num <= r)
list.add(num);
}
// 결과 리스트가 비었으면 -1 반환, 아니면 배열로 변환해 반환
return list.isEmpty() ? new int[] { -1 } : list.stream().mapToInt(i -> i).toArray();
}
}
- 1~63까지 숫자마다 2진수를 십진수로 직접 변환하지 않고 "2진수 문자열" 그대로 숫자로써 읽어 0과 1로 구성된 수(십진수로는 다른 의미지만), 그 숫자에 5를 곱하면 결국 0과 5만 포함하는 수를 생성하는 방식을 이용
- 반복 범위 64까지 제한한 이유는 64는 충분히 6자리 이진수까지 표현 가능
Share article