Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 프로그래머스 코딩테스트 입문 : 숨어있는 숫자의 덧셈 (2) 본문

⚙️ 코딩테스트

[JavaScript] 프로그래머스 코딩테스트 입문 : 숨어있는 숫자의 덧셈 (2)

썸머몽 2023. 4. 6. 00:55
728x90

문제 및 제한사항

 

문자열 my_string 매개변수로 주어집니다. my_string 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

**제한사항**

1 ≤ my_string의 길이 ≤ 1,000

1 ≤ my_string 안의 자연수 ≤ 1000

연속된 수는 하나의 숫자로 간주합니다.

000123과 같이 0이 선행하는 경우는 없습니다.

문자열에 자연수가 없는 경우 0 return 해주세요.

 

풀이 방법

 

예를 들어 주어진 문자열이 "aAb1B2cC34oOp"라면, 여기의 숫자 1+2+34 = 37이 반환되어야 한다.

주의해야 할 점이 연속된 수는 하나의 숫자로 간주한다.

 

정규표현식을 사용해 문자열에서 대문자~소문자 모두를 공백으로 바꿔 없애주었다.

그러면 "   1 2  34   " 이렇게 나오는데, 수정하기 위해서 공백을 기준으로 쪼개 배열로 만들어준다.

배열로 만든 후에는 for문을 돌려 해당 요소가 !isNaN (숫자)라면 sum에 해당 값을 더하게 해준다.

이 때 요소는 숫자가 아니기 때문에 *1을 하거나 Number, parseInt로 숫자화 시켜주어야 한다.

 

코드

function solution(my_string) {
    let sum = 0;
    let Newmy_string = my_string.replace(/[A-z]/g, " ").split(' ')
    for (let i = 0; i < Newmy_string.length; i++) {
        if (!isNaN(Newmy_string[i])) {
        sum += Number(Newmy_string[i])
        }
    }
    return sum
}

 

또 다른 풀이

 

function isAlpha(c) {
  return (c >= "a" && c <= "z") || (c >= "A" && c <= "Z");
}

function isDigit(c) {
  return c >= "0" && c <= "9";
}

function solution(my_string) {
  let answer = 0;

  let num = "";

  for (let i = 0; i < my_string.length; i++) {
    if (isDigit(my_string[i])) {
      num += my_string[i];
    }
    if (isAlpha(my_string[i]) || i === my_string.length - 1) {
      if (num !== "") {
        answer += parseInt(num);
        num = "";
      }
    }
  }
  return answer;
}

 

덧붙일 경우의 수나 고려해야 할 오류가 많아 어렵다.

728x90