[알고리즘문제풀기] 배열 만들기 2

silver's avatar
Oct 15, 2025
[알고리즘문제풀기] 배열 만들기 2

문제

내가 작성한 정답

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

silver