Level. 0
문제
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
* 제한사항
- 1 ≤ l ≤ r ≤ 1,000,000
풀이
import java.util.ArrayList;
class Solution {
public int[] solution(int l, int r) {
int[] answer = {-1};
ArrayList<Integer> list = new ArrayList<>();
for(int i=l/5; i<=r/5; i++){
if(i*5 > r) break;
String str = Integer.toString(i*5);
str = str.replaceAll("[50]", "");
if(str.length() == 0){
list.add(i*5);
}
}
if(list.size() == 0) return answer;
answer = new int[list.size()];
for(int i=0; i<answer.length; i++){
answer[i] = list.get(i);
}
return answer;
}
}
replaceAll은 정규식을 사용하여 문자열을 치환할 수 있다.
str.replaceAll("[50]", "");
여기서 사용한 정규식은 [] 이다.
- [xy] : x 또는 y 한 문자를 의미한다.
다른 풀이
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();
}
}
Integer.toBinaryString(int i)
- 10진수를 2진수 String으로 변경한다.
Integer.parseInt(String str)
- String 문자열을 Integer 타입의 데이터로 변환한 값을 리턴한다.
https://school.programmers.co.kr/learn/courses/30/lessons/181921?language=java
'Algorithm > Programers - Java' 카테고리의 다른 글
[프로그래머스(Java)] 코드 처리하기 (0) | 2023.10.10 |
---|---|
[프로그래머스(Java)] 한 번만 등장한 문자 / Collectors.groupingBy(), Collectors.joining() (1) | 2023.10.09 |
[프로그래머스(Java)] 특이한 정렬 / sort, Integer.compare(), compareTo() (0) | 2023.10.08 |
[프로그래머스(Java)] 전국 대회 선발 고사 / PriorityQueue, Stream ( range, filter, box, sorted, reduce, get) (0) | 2023.10.08 |
[프로그래머스(Java)] 유한소수 판별하기 (1) | 2023.10.02 |