문제
https://school.programmers.co.kr/learn/courses/30/lessons/181921
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
import java.util.*;
class Solution {
public int[] solution(int l, int r) {
List<Integer> list = new ArrayList<>();
String regx = "^[^12346789]*$";
for (int i = l; i <= r; i++) {
if (String.valueOf(i).matches(regx)) {
list.add(i);
}
}
if (list.size() > 0) {
int[] result = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
return new int[]{-1};
}
}
실행시간
테스트 수행 시간이 너무 오래걸리는거같다 다른 사람의 풀이를 보고 줄일수 있는방법이 있는지 찾아보았다
다른사람 풀이
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();
}
}
풀이를 보았을때 2진법을 활용하여 푼 방식이다
. 1<= l<= r<= 1000000 이진법으로 생각하면 1(2) = 2 , 1000000(2)= 64
integer.toBinaryString()을 활용하여 10진수를 2진수로 변환 // 리턴 타입 = String
Integer.parseInt 을활용하여 String 을 int로 변환
이후 5를 곱하여 5또는 0을 포함한 수로 변환
위와 같은 방식으로 문제를 풀었을때 테스트 속도가 줄어드는것을 확인할수있다.
'개발일기 > TIL(Since24.04.19)' 카테고리의 다른 글
Swagger와 RestDocs 비교: 장단점 (0) | 2025.02.24 |
---|---|
Java Arrays.sort(arr, Comparator) 정리 (0) | 2025.02.04 |
프로그래머스 수열과 구간 쿼리 3 (0) | 2024.09.04 |
프로그래머스 수조작하기 1 (0) | 2024.09.03 |
프로그래머스 flag에 따라 다른값 반환하기 (0) | 2024.09.02 |