본문 바로가기
알고리즘/Programmers

[TIL] 2023.05.15 Programmers_배열 만들기2

by heereal 2023. 5. 15.

배열 만들기2

문제 설명

정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.

 

 

입출력 예

l r result
5 555 [5, 50, 55, 500, 505, 550, 555]
10 20 [-1]

입출력 예 #1

  • 5 이상 555 이하의 0과 5로만 이루어진 정수는 작은 수부터 5, 50, 55, 500, 505, 550, 555가 있습니다. 따라서 [5, 50, 55, 500, 505, 550, 555]를 return 합니다.

입출력 예 #2

  • 10 이상 20 이하이면서 0과 5로만 이루어진 정수는 없습니다. 따라서 [-1]을 return 합니다.

 

 

나의 1차 풀이

function solution(l, r) {
    let array = [];
    for (let i = l; i <= r; i++) {
        if (i.toString().split("").filter((num) => num !== "0" || num !== "5").length === 0) array.push(i)"5"))
    }
    return array;
}

filter 이용해서 숫자 "0"과 "5"로만 이루어진 정수를 찾으려고 했는데 filter 조건으로 or 연산자를 사용하니까 원하는 대로 필터링이 적용되지 않고 모든 숫자를 배열에 push 하게 되었다. 

 

 

나의 최종 풀이

function solution(l, r) {
    let array = [];
    for (let i = l; i <= r; i++) {
        if (/^[05]+$/g.test(i.toString())) array.push(i)
    }
    return array.length === 0 ? [-1] : array;
}
  1. l부터 r까지 for문을 반복한다.
  2. 정규표현식을 이용해 문자열이 "0"또는 "5"로만 이루어져 있는지 test 한다.
  3. if문의 조건이 true일 경우에만 array에 해당 정수를 push 한다.
  4. 최종적으로 array를 return 하는데, 삼항연산자를 이용해서 빈 배열일 경우를 예외 처리한다.

 

정규표현식

/^[05]+$/g
  • ^ : 문자열의 시작을 의미합니다.
  • [05] : 괄호 안에 있는 문자 중 하나가 매치되어야 합니다. 여기서는 0 또는 5가 매치되어야 합니다.
  • +: 앞의 패턴이 하나 이상 반복됨을 의미합니다.
  • $ : 문자열의 끝을 의미합니다.
  • 따라서 이 정규표현식은 0 또는 5로 이루어진 문자열에 대해 매치됩니다. 예를 들어, "05", "0", "5555" 등과 같은 문자열에 대해서는 매치되지만, "123" 또는 "5050a"와 같은 문자열에 대해서는 매치되지 않습니다.

 

 

 

댓글