문제
정수 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해 줍니다.
최종 결과 및 느낀 점
정규 표현식을 처음 찾아보며 써보니 굉장히 코드를 간결하게 표현할 수 있음을 깨달았습니다.
하지만 한편으로는 정규 표현식을 잘 안쓰는 팀원들과 협업할 때는 오히려 코드의 가독성이 나빠질 수도 있겠다는 생각이 들며 정규 표현식이 편리하긴 하지만 팀의 스타일에 맞춰서 활용해야 겠다는 생각이 들었습니다.
'코딩 테스트 공부' 카테고리의 다른 글
| 프로그래머스 자바스크립 코딩 기초 트레이닝 - 접미사 배열 (0) | 2025.12.17 |
|---|---|
| 프로그래머스 자바스크립트 코딩 기초 트레이닝 - 배열 만들기4 (0) | 2025.12.09 |
| 프로그래머스 자바스크립트 코딩 기초 트레이닝 - 원소들의 곱과 합 (0) | 2025.12.04 |
| 프로그래머스 자바스크립트 코딩 기초 트레이닝 - 문자열 곱하기 (0) | 2025.10.29 |
| 프로그래머스 자바스크립트 코딩 기초 트레이닝 - 문자열 섞기 (0) | 2025.10.29 |