문제: https://school.programmers.co.kr/learn/courses/30/lessons/181921
import java.util.*;
class Solution {
public int[] solution(int l, int r) {
List<Integer> answer = new ArrayList<>();
for(int i = l; i <= r ; i++){
// 숫자 체크
String str = "";
boolean check = false;
str += i;
for(char c : str.toCharArray()){
if(c == '0' || c == '5'){
check = true;
}else{
check = false;
break;
}
}
if(check){
answer.add(i);
}
}
// return 배열
int[] answer1 = new int[answer.size()];
for(int i = 0; i < answer.size(); i++){
answer1[i] = answer.get(i);
}
if(answer1.length != 0){
return answer1;
}else{
return new int[]{-1};
}
}
}
풀이만 봐도 알 수 있듯이 나는 굉장히 복잡한게 푼것 같다.
그래서 다른 사람의 풀이를 확인해보았다.
import java.util.ArrayList;
class Solution {
public int[] solution(int l, int r) {
ArrayList<Integer> result = new ArrayList<>();
for(int i=l;i<=r;i++){
String str = String.valueOf(i);
str = str.replace("5","").replace("0","");
if("".equals(str)){
result.add(i);
}
}
return result.size() > 0 ?
result.stream().mapToInt(Integer::intValue).toArray()
: new int[]{-1};
}
}
0과 5로만 만들수 있다는 말은 0과 5를 모두 “”로 바꾼다면 남는 문자가 없다는 말과 같다
이 로직을 사용하니 조금 더 간편하게 나타낼수 있는것 같다!
조금 더 유연하게 생각하는 힘을 길러보자!
참 쉽쥬잉~?~?