인프런 커뮤니티 질문&답변

rhkdtjd_12님의 프로필 이미지
rhkdtjd_12

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

3. 숫자만 추출

아스키코드로 숫자만 추출하여 풀어 보았습니다.

작성

·

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"을 반환하도록 처리할 수 있습니다. 이렇게 하면 예외적인 상황에도 안정적으로 대응할 수 있습니다.

좋은 질문 감사합니다. 알고리즘 학습에 도움이 되기를 바랍니다!

rhkdtjd_12님의 프로필 이미지
rhkdtjd_12

작성한 질문수

질문하기