배열 만들기2

이리·2024년 12월 17일
0
post-thumbnail

문제: https://school.programmers.co.kr/learn/courses/30/lessons/181921

문제설명

  • 주어진 파라미터: Int l, int r
  • 반환값: int[]
  • l 이상 r 이하 정수 중 숫자 0과 5로만 이루어진 모든 정수를 오름차순을 저장한 배열을 return
  • 해당 정수가 없다면 -1 return
  • 1 ≤ l ≤ r ≤ 1,000,000

풀이방식

  1. 0과 5만 들어가는걸 어떻게 체크할까
  2. 뽑아놓고 숫자 하나씩 5,0인지 확인한다면 수행시간에 걸리지 않을까
  3. String 전환해서 하나씩 확인해보기

코드

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를 모두 “”로 바꾼다면 남는 문자가 없다는 말과 같다

이 로직을 사용하니 조금 더 간편하게 나타낼수 있는것 같다!

조금 더 유연하게 생각하는 힘을 길러보자!


참 쉽쥬잉~?~?

0개의 댓글