작성
·
208
0
자연수를 만들어야 되니 제일 첫번째가 0이 오면 안되므로 replace 정규식을 활용 했습니다.
function solution(args) {
const originalArray = [];
for (const val of args) {
if (val.charCodeAt() >= 48 && val.charCodeAt() <= 57) {
originalArray.push(val);
}
}
return originalArray.join("").replace(/^0/, "");
}
console.log(solution("tge0a1h205er"));
console.log(solution("g0en2T0s8eSoft"));
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
rhkdtjd_12님께서 자바스크립트를 사용하여 문자열에서 숫자만 추출하는 코드를 작성하신 것 같습니다. 작성하신 코드를 분석해보면, 각 문자를 순회하면서 아스키코드를 활용하여 숫자에 해당하는 문자만을 배열에 추가한 뒤, 배열을 문자열로 합치고 가장 처음에 위치한 0을 제거하는 로직을 사용하셨네요.
그러나 코드에는 작은 개선점이 있습니다. val.charCodeAt()
는 반복문 안의 같은 문자에 대해 두 번 호출됩니다. 이를 개선하기 위해 한 번만 호출하고 결과를 변수에 저장해 사용하는 것이 좋습니다. 또한 replace
메소드를 사용하여 0
을 제거하는 대신, 숫자 추출 과정에서 0
이 첫 번째 요소로 와도 문제가 없게 처리할 수도 있습니다.
다음은 이러한 개선점을 적용한 코드 예시입니다:
function solution(args) {
let result = ""; // 최종 문자열을 저장할 변수를 선언합니다.
for (const val of args) {
const charCode = val.charCodeAt(); // charCodeAt() 호출 결과를 저장합니다.
if (charCode >= 48 && charCode <= 57) {
result += val; // 숫자인 경우 바로 result에 추가합니다.
}
}
return result.replace(/^0+/, "") || "0"; // 앞쪽의 0들을 제거하고, 문자열이 비어있다면 "0"을 반환합니다.
}
console.log(solution("tge0a1h205er"));
console.log(solution("g0en2T0s8eSoft"));
코드의 마지막 부분에서 || "0"
을 추가하여, 만약 추출된 숫자가 하나도 없으면 "0"
을 반환하도록 처리할 수 있습니다. 이렇게 하면 예외적인 상황에도 안정적으로 대응할 수 있습니다.
좋은 질문 감사합니다. 알고리즘 학습에 도움이 되기를 바랍니다!