Kotlin&Java) 프로그래머스Lv.0 - 배열 만들기 2
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()
}
}