코딩 테스트 공부

프로그래머스 자바스크립트 코딩 기초 트레이닝 - 배열 만들기2

dev_in 2025. 12. 8. 21:40

 

문제

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

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

 

고민한 점

두 정수 사이에서 특정 값만 추출해서 배열로 만드는 것은 익숙하지만 두 정수 사이에서 '특정 숫자만으로 이루어진' 숫자들을 모아서 배열로 만들려면 어떻게 해야 할지 고민이었습니다.

자바스크립트에서 특정 문자열을 포함하는지 찾아내는 정규 표현식 기능을 발견하여, 이번에는 문자열로 변환 후 작업을 해보기로 했습니다.

 

해결 과정

정규 표현식

 

1. 먼저 두 정수 사이를 for문으로 돌면서 사이에 있는 수들을 전부 찾아내야 한다고 생각했습니다. 그리고 number값보다는 string값을 찾아내는 방법이 더 간단하기에 문자열로 바꿔준 stringNum에 담아둡니다.

function solution(l, r) {
    const result = [];
    for (i = l; i <= r; i++) {
        const stringNum = String(i);
        }
    }

 

2. 정규 표현식의 예제를 참고하며 활용합니다.

/05/ : "05"라는 연속된 문자열을 찾기 (정확하게 "05"인 문자열 - 순서상관 있음)

/[05]/: "0" 또는 "5"가 나오는 경우를 모두 찾기 (0 또는 5를 독립적으로 취급 - 순서상관 없음)

/^[05]/: 문자열의 시작 부분에 "0" 또는 "5"가 있는 경우 찾기 (0 또는 5를 독립적으로 취급 - 순서상관 없음)

/^[05]$/: 문자열의 전체가 단일한 "0"또는 "5"로 이루어진 경우 찾기 (문자열의 길이가 1, 값이 0 또는 5인경우)

/^[05]+$/: 문자열의 전체가 "0"또는 "5"로 이루어진 경우 찾기 (문자열의 길이1이어도 되고 더 길어도 됨)

test(): 문자열에 일치하는 부분이 있는지 확인 true 또는 false를 반환

 

function solution(l, r) {
    const result = [];
    for (i = l; i <= r; i++) {
        const stringNum = String(i);
        if (/^[05]+$/.test(stringNum)) {
            result.push(i);
        }
        return result.length > 0 ? result : [-1];
    }

 

 3. 0 또는 5로 이루어진 i들을 빈 배열 result에 담아둡니다. l부터 순서대로 내부를 돌았으니 저절로 오름차순으로 빈배열에 들어갔습니다. 그러니 마지막으로 0,5로 이루어진 경우가 없는 경우에 출력할 [-1]을 삼항 연산자로 처리한 뒤 return해 줍니다.

 

최종 결과 및 느낀 점

정규 표현식을 처음 찾아보며 써보니 굉장히 코드를 간결하게 표현할 수 있음을 깨달았습니다.

하지만 한편으로는 정규 표현식을 잘 안쓰는 팀원들과 협업할 때는 오히려 코드의 가독성이 나빠질 수도 있겠다는 생각이 들며 정규 표현식이 편리하긴 하지만 팀의 스타일에 맞춰서 활용해야 겠다는 생각이 들었습니다.