문제 설명
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
제한사항
1 ≤ l ≤ r ≤ 1,000,000
입출력 예
l r result
5 555 [5, 50, 55, 500, 505, 550, 555]
10 20 [-1]
import java.util.ArrayList;
class Solution {
public int[] solution(int l, int r) {
ArrayList<Integer> arrList = new ArrayList<Integer>();
for(int i=l; i<=r; i++) {
if(String.valueOf(i).matches("^[05]+$")) {
arrList.add(i);
}
}
if(arrList.isEmpty()) {
arrList.add(-1);
}
int[] answer = arrList.stream().mapToInt(Integer::intValue).toArray();
return answer;
}
}
정규표현식 생각이 안 나서 gpt 도움을 빌렸다.
다른 사람들 푼 거 봤는데 역시 내 코드(?)가 제일 좋은 것 같다.
이 코드가 좋다고 생각하는 이유
1. 정규표현식으로 확실하고 직관적이게 풀었다.
l부터 r 사이 수 중 처음부터 끝까지 각 자리 수에 0 또는 5만 들어가는 수만 딱 뽑는다.
이진법 뭐 그런 걸로 우회 안 한다.
2. 코드가 쉽다.
난 진짜 코드는 쉬운 게 장땡이라 생각하는 사람이다.
그래야 같이 일하는 사람이 덜 머리 쓰고 실수도 덜 한다.
쉬운 코드가 절대 수준 낮은 코드가 아니다.
'코딩테스트 연습' 카테고리의 다른 글
간단한 논리 연산 (0) | 2024.04.18 |
---|---|
배열 만들기 4 (0) | 2024.04.18 |
수열과 구간 쿼리 4 (0) | 2024.04.18 |
수열과 구간 쿼리 2 (0) | 2024.04.17 |
수열과 구간 쿼리 3 (0) | 2024.04.17 |