문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
5와 0으로 이루어진 숫자들 중에 l이상 r이하의 수를 저장하는 문제이다.
나는 "5"와 "0"의 문자열을 붙이면서, 재귀적으로 문자열을 만들고, Integer로 파싱해서 l이상 r이하라는 조건에 맞는 수를 ArrayList에 넣는 것을 생각했다.
단, 수가 겹칠 수 있으므로, 집합을 사용해서 하나의 수만 저장이 되게하고, 그것을 ArrayList에 옮겨담고 정렬을 해서 int 배열에 복사했다.
소스코드
import java.util.*;
class Solution {
public HashSet<Integer> set;
public int[] solution(int l, int r) {
set = new HashSet<>();
backTrack("5", 0, l, r);
backTrack("0", 0, l, r);
ArrayList<Integer> list = new ArrayList<>(set);
Collections.sort(list);
int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer.length == 0 ? new int[]{-1} : answer;
}
private void backTrack(String s, int depth, int min, int max) {
int value = Integer.parseInt(s);
if (value > max || depth > 7) {
return;
}
if (min <= value && value <= max) {
set.add(value);
}
backTrack(s + "0", depth + 1, min, max);
backTrack(s + "5", depth + 1, min, max);
}
}'Problem Solving > Programmers' 카테고리의 다른 글
| [Programmers] H-Index - Java (1) | 2025.05.29 |
|---|---|
| [Programmers] 붕대 감기 - Java (0) | 2025.05.29 |
| [Programmers] 코드 처리하기 - Java (0) | 2025.05.11 |
| [Programmers] 배열 만들기 5 - Java (0) | 2025.05.10 |
| [Programmers] 부분 문자열 이어 붙여 문자열 만들기 - Java (0) | 2025.05.06 |