코딩테스트 연습 > 코딩 기초 트레이닝
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
n ≤ 1,000,000| l | r | result |
|---|---|---|
| 5 | 555 | [5, 50, 55, 500, 505, 550, 555] |
| 10 | 20 | [-1] |
// 나의 풀이
const solution = (l, r) => {
const arr = []
for(i = l; i <= r; i++) {
let length = i.toString().length;
let resultNum = 0;
for(j = 0; j <= length; j++) {
let splitNum = i.toString().substr(j, 1);
if(splitNum === '0' || splitNum === '5') {
resultNum++;
} else {
break;
}
}
if(resultNum == length)
arr.push(i);
}
return arr.length > 0 ? arr : [-1];
}
첫 번째 인자로 길이값을 받고, 두 번째 인자는 (element, index)를 받는 함수를 통해 기본값으로 0부터 길이가 5인 인덱스를 출력시킬 수도 있다.
// 다른 사람의 풀이 참고 1
function solution(l, r) {
const result = Array.from({length:r-l+1}, (_,i) => i+l)
.filter(n => !/[^05]/.test(n));
return result.length ? result : [-1];
}
Array.prototype.filter ( callbackfn [ , thisArg ] )
filter()함수는 배열의 요소를 순회하면서 콜백 함수를 사용하여 원하는 조건에 따라 필터링하는 함수이다. 주로 특정 조건을 만족하는 새로운 배열을 필요로 할 때 사용하는 편이다. SQL로 치면 where절에서 하는 역할을 수행한다.- ECMA에서는 "주어진 배열의 값들을 오름차순으로 접근해 callbackfn을 통해 true를 반환하는 요소를 기준으로 신규 배열을 만들어 반환한다" 라고 정의되어 있다.
filter()함수는boolean만 반환할 수 있는데, true일 경우 해당 요소를 새로운 배열에 추가하고, false일 경우 추가하지 않는다. filter 메서드는 특정 조건에 일치하는 요소만 배열에 담고 싶을 때 사용한다.
const numbers = [1, 2, 3, 4, 5];
const result = numbers.filter(number => number > 3);
console.log(numbers);
// [1, 2, 3, 4, 5];
console.log(result);
// [4, 5]
ES6) map, filter, reduce 메서드 사용법
Javascript - Array filter 사용법
// 다른 사람의 풀이 참고 2
// 0또는 5가 포함되는 문자를 공백으로 치환
// 공백 조건을 만족한다면 0과 5로만 이루어진 정수이므로
// 이를 arr 배열에 추가하여 return
function solution(l, r, arr = []) {
for(let i = l; i <= r; i++) {
if (i.toString().replaceAll(/[05]/g, '') === '') arr.push(i);
}
return arr.length ? arr : [-1];
}
정규표현식 관련
g: Global: 모든 문자 검색(안 쓰면 매칭되는 첫 문자만 검색)i: Ignore Case: 대소문자 구분 안함m: Multi line: 여러 행의 문자열에 대해 검색[]: 괄호안의 문자들 중 하나[^문자]: 괄호안의 문자를 제외한 것^문자열: 특정 문자열로 시작(괄호없음)문자열$: 특정 문자열로 끝남
정규표현식을 사용한 replace, replaceAll 치환 방법