def solution(l, r):
binary_integers = []
for i in range(len(str(l)), len(str(r)) + 1):
for j in range(2 ** i):
binary_str = format(j, f'0{i}b')
if binary_str[0] != '0':
binary_int = int(binary_str.replace("1", "5"))
binary_integers.append(binary_int)
filtered_integers = [binary for binary in binary_integers if l <= binary <= r]
return filtered_integers if filtered_integers else [-1]
1) l, r의 자리수만큼 가능한 2진수를 만드는데 이 때 1 대신 5를 넣는다. (0으로 시작은 제외)
2) 결과 리스트를 돌며 l과 r사이에 들어있는 것만 필터링한다.
def solution(l, r):
answer = []
for num in range(l, r + 1):
if not set(str(num)) - set(['0', '5']):
answer.append(num)
return answer if answer else [-1]
set 차집합! 간결하고 우아하다
function solution(l, r) {
const result = Array.from({length:r-l+1}, (_,i)=>i+l).filter(n=>!/[^05]/.test(n));
return result.length ? result : [-1];
}
자바스크립트 코드에서 참고했는데 정규식을 쓸 수도 있다.
너무 복잡하게 생각하고 접근했다.