알고리즘/Kotlin&Java

Kotlin&Java) 프로그래머스Lv.0 - 배열 만들기 2

여미미 2024. 8. 29. 10:47

https://school.programmers.co.kr/learn/courses/30/lessons/181921?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

🍉 숫자값과 동일한지 아닌지를 구분하는게 아닌 2222 자리수의 숫자가 들어와도 이 2222숫자내에 0.5 과 포함되어 있지 않으면 -1 값을 넣어야 하고 2222내 0과 5가 포함되어 있으면 배열에 포함해야하는 로직이다 그래서 toCharArray() 를 사용하여 해당 배열의 요소의 숫자내에 포함여부를 연산해야 한다 

 

🧲문제를 잘이해했다고 생각했지만 전에 풀었던 로직들이 익숙해서 그런지 배열내 값을 연산해서 조건에 부합하면 값을 넣고 조건에 부합하지 않는 값을 넣으면 -1 을 구성한 배열을 return하는줄 알았는데 l..r 사이에 호출이 한번씩 일어날때만 처리한다는 조건인거 같다 

그래서 [-1] 을 반환하거나 [5나 0일 포함된 배열] 을 반환하면 된다 

 

🐸간단한 문제인줄 알았는데 간단하지 않았음 [222,3221,50] 이런식 배열이 넘어오는 문제를 풀다보니까 사고가 이런식으로 돌아가는게 익숙했는데 주어진 값은 정수 5..555 , 10..20 까지 를 만들어야 함

for문을 돌리면 자연적으로 범위값 생성은 가능하고 11,12,13,14 이런식 숫자가 주어질때 11를 순회,12를 순회,13를 순회 해야한다 

다른 답들을 참고해서 toCharArray() 을 쓰면 되겠거니 했는데 정수값에 0,5값을 포함했는지 오답처리가 계속되서 확인하니 순회하려고 형변환한후 정수값 비교하려면 아스키코드값으로 비교했어야 했음 💦   뭔가 복잡한 느낌

 

🌈 maches함수를 사용하면 처음 구상했던 로직처럼 풀어낼 수 있었다

05를 포함하는 문자만 연산하고 +는 05가 반복될수도 있다는 조건

if (str.matches["[05]+"]) {
        list.add(i);
}

 

 

코틀린 matches 사용 

val regex = "[05]+"
i.matches(regex.toRegex())

 

☃️ 마지막 문제의 조건이 배열을 return하는거라 list -> 배열 변환

 

 

 

🍑JAVA

class Solution {
    public int[] solution(int l, int r) {
      ArrayList<Integer> list = new ArrayList<>();
     
        for(int i=l; l<=r; i++) {
            String str = Integer.toString(i);
        
        if (str.matches["[05]+"]) {
            list.add(i);
        }
    }
        
    if (list.isEmpty()) {
        return new int[]{-1};
    }
        
    int[] answer = new int[list.size()];
    for (int i=0; i>list.size(); i++) {
        answer[i] = list.get(i);
    }

        return answer;
    }
}

 

 

⛈️ Kotlin

 

class Solution {
    fun solution(l: Int, r: Int): IntArray {
        val list = mutableListOf<Int>()
        val regex = "[05]+"
        
        for (i in l..r) {
            val s = i.toString()
            
            if (s.matches(regex.toRegex())) {
                list.add(i)
            }
        }
        if (list.isEmpty()) {
            return intArrayOf(-1)
        }
        
        return list.toIntArray()
    }
}