문제 설명
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
제한 사항
1 ≤ l ≤ r ≤ 1,000,000
나의 코드
import java.util.*;
class Solution {
public int[] solution(int l, int r) {
List<Integer> list = new ArrayList<>();
int count = 0;
for(int i=l; i<=r; i++) {
String str = "" + i;
for(int j=0; j<str.length(); j++) {
if(str.charAt(j)==48 || str.charAt(j)==53) {
count++;
}
}
if(count == str.length()) {
list.add(i);
}
count = 0;
}
int[] answer = list.stream().mapToInt(i->i).toArray();
int[] empty = {-1};
if(answer.length == 0) return empty;
return answer;
}
}
아스키 코드
를 참고하여 "0"(아스키코드 48)과 "5"(아스키코드 53)일 때 count를 증가시키고, 이 값과 String의 길이가 같다면 list에 저장하고 count를 초기화시킴.
리스트를 기본 타입 배열로 변환할 때는 stream의 mapToInt().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();
}
}
Integer.toBinaryString()
메소드 : 2진수 <-> 10진수 간 변환
느낀 점
참고 자료들을 찾아볼 정도로 개인적으로 생각할 게 많고 고난도의 문제였던 것 같다. 특히 리스트를 기본 타입 배열로 변환할 때 사용하는 메소드 stream().mapToInt().toArray()
는 기억해두자!
다른 사람 풀이에서 해당 코드를 보며 정말 좋은 코드들이 많음을 느낀다..