[Programmers][JS] 숨어있는 숫자의 덧셈(1)

mj·2024년 6월 30일
0

코딩테스트문제

목록 보기
28/50
post-custom-banner

문제


문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

제한사항

1 ≤ my_string의 길이 ≤ 1,000
my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

입출력 예

my_stringresult
"aAb1B2cC34oOp"10
"1a2b3c4d123"16



나의 코드


function solution(my_string) {
    var answer = 0;
    
    for (const char of my_string){
        if(char.charCodeAt(0)>=48 && char.charCodeAt(0)<=57){
            answer += Number(char)
        }
    }
    
    return answer;
}

코드 풀이

for of로 문자열 하나씩 순회하며 그 값이 자연수인지 판단하고, 자연수이면 결과값과 더한다.

자연수인지 판단하는 법

문자열 '0'~'9'는 유니코드로 48 ~ 57 사이의 값이다.

let zero = '0';
let nine = '9'
console.log(zero.charCodeAt(0)); // 48
console.log(nine.charCodeAt(0)); // 57



다른 코드


1. 정규식 사용

function solution(my_string) {
    const answer = my_string.replace(/[^0-9]/g, '')
                            .split('')
                            .reduce((acc, curr) => acc + Number(curr), 0);
    return answer;
}
  • / / : 사이 부분이 정규식패턴
  • [^0-9] : 숫자가 아닌 모든 문자 ([]:문자클래스 / ^: 부정)
  • g : global 플래그 / 정규식이 문자열 전체에서 일치하는 모든 부분을 찾도록 한다. 이 플래그가 없으면 첫 번째 일치만 찾아서 대체한다.

2. reduce() , ? 연산자

function solution(my_string) {
    return [...my_string].reduce((acc,cur)=>Number(cur) ? +acc + +cur : acc, 0)
}
  • 스프레드 연산자를 문자열에 사용하였다.
  • ? 연산자 : NaN도 false값으로 판단한다.
    자바스크립트에서 false, 0, -0, 0n, "" (빈 문자열), null, undefined, NaN은 모두 거짓(falsy) 값으로 평가됩니다.



Comment

  • 문자열을 유니코드로 변환하는 법 : str.charCodeAt(0)
  • 정규식의 사용법을 조금이나마 배움..
  • 스프레드 연산자를 문자열에도 사용할 수 있다.
  • undefined, NaN ... 모두 거짓으로 평가된다.
profile
일단 할 수 있는걸 하자.
post-custom-banner

0개의 댓글